ad
This commit is contained in:
parent
3a1815b0fb
commit
058b349725
@ -75,7 +75,7 @@
|
||||
</el-table>
|
||||
|
||||
</div>
|
||||
<div class="flex mt-4 justify-end">
|
||||
<div class="flex justify-end mt-4">
|
||||
<pagination v-model="pager" @change="getLists" />
|
||||
</div>
|
||||
</el-card>
|
||||
|
@ -4,15 +4,8 @@
|
||||
<!-- 触发弹窗 -->
|
||||
<slot name="trigger"></slot>
|
||||
</div>
|
||||
<el-dialog
|
||||
v-model="visible"
|
||||
:custom-class="customClass"
|
||||
:center="center"
|
||||
:append-to-body="true"
|
||||
:width="width"
|
||||
:close-on-click-modal="clickModalClose"
|
||||
@closed="close"
|
||||
>
|
||||
<el-dialog v-model="visible" :custom-class="customClass" :center="center" :append-to-body="true" :width="width"
|
||||
:close-on-click-modal="clickModalClose" @closed="close">
|
||||
<!-- 弹窗内容 -->
|
||||
<template v-if="title" #header>{{ title }}</template>
|
||||
|
||||
@ -24,11 +17,7 @@
|
||||
<el-button v-if="cancelButtonText" @click="handleEvent('cancel')">
|
||||
{{ cancelButtonText }}
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="confirmButtonText"
|
||||
type="primary"
|
||||
@click="handleEvent('confirm')"
|
||||
>
|
||||
<el-button v-if="confirmButtonText" type="primary" @click="handleEvent('confirm')">
|
||||
{{ confirmButtonText }}
|
||||
</el-button>
|
||||
</div>
|
||||
|
@ -43,11 +43,15 @@
|
||||
import { usePaging } from "@/hooks/usePaging"
|
||||
import { useDictData } from "@/hooks/useDictOptions"
|
||||
import { apisupplierLists } from '@/api/suppler_list'
|
||||
import { defineEmits } from "vue"
|
||||
import { defineEmits, defineProps } from "vue"
|
||||
let props = defineProps({
|
||||
project_id: Number
|
||||
})
|
||||
|
||||
// 查询条件
|
||||
const queryParams = reactive({
|
||||
name: ''
|
||||
name: '',
|
||||
project_id: props.project_id
|
||||
});
|
||||
|
||||
const { dictData } = useDictData('supplier_grade,supplier_group,supplier_category,sex')
|
||||
|
@ -225,7 +225,7 @@
|
||||
<customDialog @customEvent="customEvent"></customDialog>
|
||||
</el-dialog>
|
||||
<el-dialog v-model="showDialog1" title="选择合同" width="70%">
|
||||
<contractDialog @customEvent="customEvent1"></contractDialog>
|
||||
<contractDialog @customEvent="customEvent1" :project_id="project?.id || ''"></contractDialog>
|
||||
</el-dialog>
|
||||
</el-form>
|
||||
</popup>
|
||||
@ -247,6 +247,8 @@ import type { PropType } from 'vue'
|
||||
import configs from "@/config"
|
||||
import useUserStore from "@/stores/modules/user";
|
||||
import { computed } from "vue"
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
const { dictData } = useDictData('pay_period,invoice_type,tax_rate')
|
||||
|
||||
const base_url = configs.baseUrl + configs.urlPrefix
|
||||
const userStore = useUserStore();
|
||||
@ -288,13 +290,6 @@ const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
|
||||
}
|
||||
|
||||
const userEmail = (rule: any, value: string, callback: (arg0: Error | undefined) => void) => {
|
||||
|
||||
// const mailReg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/
|
||||
// // if (!value) {
|
||||
// // return callback(new Error('邮箱不能为空'))
|
||||
// // }
|
||||
|
||||
|
||||
if (value && !mailReg.test(value)) {
|
||||
callback(new Error('请输入正确的邮箱格式'))
|
||||
} else {
|
||||
@ -313,12 +308,13 @@ let invoicing_amount_daxie = computed(() => {
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
}
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
|
||||
|
||||
let props = defineProps({
|
||||
project: Object
|
||||
})
|
||||
|
||||
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
|
@ -3,7 +3,8 @@
|
||||
<el-card class="!border-none mb-4" shadow="never">
|
||||
<el-form class="mb-[-16px]" :model="queryParams" inline>
|
||||
<el-form-item label="开票公司名称" prop="invoicing_company_name">
|
||||
<el-input class="w-[280px]" v-model="queryParams.invoicing_company_name" clearable placeholder="请输入开票公司名称" />
|
||||
<el-input class="w-[280px]" v-model="queryParams.invoicing_company_name" clearable
|
||||
placeholder="请输入开票公司名称" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="客户" prop="customer_id">
|
||||
@ -15,7 +16,8 @@
|
||||
<el-form-item label="合同" prop="contract_id">
|
||||
<el-select class="w-[280px]" v-model="queryParams.contract_id" clearable placeholder="请选择合同">
|
||||
<el-option label="全部" value=""></el-option>
|
||||
<el-option v-for="(item, index) in list" :key="index" :label="item.contract_name" :value="item.id" />
|
||||
<el-option v-for="(item, index) in list" :key="index" :label="item.contract_name"
|
||||
:value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
@ -33,7 +35,8 @@
|
||||
</template>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button v-perms="['InvoicingRequests.InvoicingRequests/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
<el-button v-perms="['InvoicingRequests.InvoicingRequests/delete']" :disabled="!selectData.length"
|
||||
@click="handleDelete(selectData)">
|
||||
删除
|
||||
</el-button>
|
||||
|
||||
@ -44,25 +47,25 @@
|
||||
<el-table-column label="客户" prop="custom_name" show-overflow-tooltip />
|
||||
<el-table-column label="项目编码" prop="project_code" show-overflow-tooltip />
|
||||
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
|
||||
|
||||
<el-table-column label="开票日期" prop="invoicing_date" show-overflow-tooltip />
|
||||
|
||||
<el-table-column label="期次" prop="period" show-overflow-tooltip />
|
||||
<el-table-column label="发票类型" prop="invoice_type" show-overflow-tooltip />
|
||||
|
||||
<el-table-column label="开票金额(含税)" prop="invoicing_amount" show-overflow-tooltip />
|
||||
<el-table-column label="开票金额(非税)" prop="amount_including_tax" show-overflow-tooltip />
|
||||
<el-table-column label="税率(%)" prop="tax_rate" show-overflow-tooltip />
|
||||
<!-- <el-table-column label="开票金额(税额)" prop="tax" show-overflow-tooltip /> -->
|
||||
<el-table-column label="操作" width="160" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button v-perms="['InvoicingRequests.InvoicingRequests/edit']" type="primary" link @click="handleEdit(row)">
|
||||
<el-button v-perms="['InvoicingRequests.InvoicingRequests/edit']" type="primary" link
|
||||
@click="handleEdit(row)">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button v-perms="['InvoicingRequests.InvoicingRequests/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
<el-button v-perms="['InvoicingRequests.InvoicingRequests/delete']" type="danger" link
|
||||
@click="handleDelete(row.id)">
|
||||
删除
|
||||
</el-button>
|
||||
<el-button v-perms="['InvoicingRequests.InvoicingRequests/detail']" link @click="handledetail(row)">
|
||||
<el-button v-perms="['InvoicingRequests.InvoicingRequests/detail']" link
|
||||
@click="handledetail(row)">
|
||||
详情
|
||||
</el-button>
|
||||
</template>
|
||||
|
@ -27,9 +27,6 @@ const year = ref(new Date().getFullYear())
|
||||
const showChart = ref(true)
|
||||
|
||||
|
||||
/* 楚子航心里微微一动,点开了那个链接,进入一个漆黑的博客页面,博客的主人似乎开通就没有更新过。楚子航对着那个页面思考了片刻,忽然同时按下“Ctrl”和“A”键,这个键组合是“全选”,页面
|
||||
上的全部文字都被选择并变色,于是隐藏在黑背景里的黑色文字浮现了出来:“你需要有一张交通卡,一日之间在一线和环线上的每个地铁站进入各一次,每次都要刷这张卡,然后你就会看见卡片变成金色的。
|
||||
刷这张地铁卡,就能到达隐藏的站点。”*/
|
||||
|
||||
const customList = reactive([
|
||||
{
|
||||
@ -40,11 +37,16 @@ const customList = reactive([
|
||||
name: "年度回款金额",
|
||||
value: 3
|
||||
},
|
||||
{
|
||||
name: "年度未回款金额",
|
||||
value: 3
|
||||
},
|
||||
{
|
||||
name: "年度回款计划金额",
|
||||
value: 3
|
||||
},
|
||||
|
||||
|
||||
])
|
||||
|
||||
const labelOption = {
|
||||
@ -63,8 +65,7 @@ const initChart = (id, opt) => {
|
||||
|
||||
const getCustom = async () => {
|
||||
showChart.value = false
|
||||
|
||||
let res = await apistatisticsprojectRefund()
|
||||
let res = await apistatisticsprojectRefund({ year: year.value })
|
||||
showChart.value = true
|
||||
await nextTick()
|
||||
var option4 = {
|
||||
@ -76,7 +77,7 @@ const getCustom = async () => {
|
||||
},
|
||||
legend: {
|
||||
data: [res.invoice_series.name, res.refund_plan_series.name, res.refund_series
|
||||
.name,]
|
||||
.name, res.not_refund_series.name,]
|
||||
},
|
||||
toolbox: {
|
||||
show: true,
|
||||
@ -144,16 +145,30 @@ const getCustom = async () => {
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
name: res.not_refund_series.name,
|
||||
type: 'bar',
|
||||
label: labelOption,
|
||||
emphasis: {
|
||||
focus: 'series'
|
||||
},
|
||||
data: res.not_refund_series.data,
|
||||
itemStyle: {
|
||||
normal: {
|
||||
label: {
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
]
|
||||
};
|
||||
|
||||
initChart("ProjectPayment", option4)
|
||||
customList[0].value = res.year_invoicing_amount
|
||||
customList[1].value = res.year_refund_amount
|
||||
customList[2].value = res.year_refund_plan_amount
|
||||
customList[2].value = res.year_not_refund_amount
|
||||
customList[3].value = res.year_refund_plan_amount
|
||||
}
|
||||
|
||||
getCustom()
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
|
@ -57,7 +57,7 @@ const initChart = (id, opt) => {
|
||||
|
||||
const getCustom = async () => {
|
||||
showChart.value = false
|
||||
let res = await apistatisticsprojectPayment()
|
||||
let res = await apistatisticsprojectPayment({ year: year.value })
|
||||
showChart.value = true
|
||||
await nextTick()
|
||||
|
||||
|
@ -94,7 +94,7 @@ const setHistogramOption = (legend, xAxisData, series) => {
|
||||
|
||||
const getCustom = async () => {
|
||||
showChart.value = false
|
||||
let res = await apistatisticsprocurementContract()
|
||||
let res = await apistatisticsprocurementContract({ yaer: year.value })
|
||||
showChart.value = true
|
||||
await nextTick()
|
||||
initChart("PurchaseContracts", setHistogramOption({ data: [res.series.name] }, res.column
|
||||
|
@ -97,7 +97,7 @@ const setHistogramOption = (legend, xAxisData, series) => {
|
||||
|
||||
const getCustom = async () => {
|
||||
showChart.value = false
|
||||
let res = await apistatisticssubcontractingContract()
|
||||
let res = await apistatisticssubcontractingContract({ year: year.value })
|
||||
showChart.value = true
|
||||
await nextTick()
|
||||
initChart("Subcontract", setHistogramOption({ data: [res.series.name] }, res.column
|
||||
|
@ -96,7 +96,7 @@ const setHistogramOption = (legend, xAxisData, series) => {
|
||||
|
||||
const getCustom = async () => {
|
||||
showChart.value = false
|
||||
let res = await apistatisticscontracts()
|
||||
let res = await apistatisticscontracts({ year: year.value })
|
||||
showChart.value = true
|
||||
await nextTick()
|
||||
initChart("main3", setHistogramOption({ data: [res.series.name] }, res.column
|
||||
|
@ -6,7 +6,7 @@
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目名称" prop="project_id"
|
||||
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]" @click="showDialog = true">
|
||||
<el-input v-model="project_name" readonly clearable placeholder="选择项目" />
|
||||
<el-input v-model="project_name" readonly clearable placeholder="选择项目" :disabled="project" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
@ -21,7 +21,7 @@
|
||||
</el-form-item></el-col><el-col :span="8">
|
||||
<el-form-item label="项目估算" prop="project_estimation"
|
||||
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-input v-model="formData.project_estimation" clearable placeholder="请输入项目估算" />
|
||||
<el-input v-model="formData.project_estimation" clearable placeholder="请输入项目估算" type="number" />
|
||||
</el-form-item></el-col><el-col :span="24">
|
||||
<el-form-item label="招标项目资金来源" label-width="130px" prop="bidding_project_fund_source">
|
||||
<el-radio-group v-model="formData.bidding_project_fund_source" placeholder="请选择招标项目资金来源">
|
||||
@ -48,7 +48,8 @@
|
||||
<el-form-item label="竞争对手" prop="competitor">
|
||||
<el-input v-model="formData.competitor" clearable placeholder="请输入竞争对手" />
|
||||
</el-form-item></el-col><el-col :span="24">
|
||||
<el-form-item label="是否需要保证金" prop="is_margin" :rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
|
||||
<el-form-item label="是否需要保证金" prop="is_margin"
|
||||
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
|
||||
<el-radio-group v-model="formData.is_margin" placeholder="请选择是否需要保证金">
|
||||
<el-radio v-for="(item, index) in dictData.whether_status" :key="index"
|
||||
:label="parseInt(item.value)">
|
||||
@ -133,28 +134,22 @@
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import reviewprocess from '@/components/reviewprocess/index.vue'
|
||||
|
||||
import projectTable from "@/components/project/index.vue"
|
||||
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import { apiBidBiddingDecisionAdd, apiBidBiddingDecisionDetail } from '@/api/bid_bidding_decision'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import type { PropType } from 'vue'
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
let props = defineProps({
|
||||
project: Object
|
||||
})
|
||||
const { dictData } = useDictData('construction_funds_sources,bidding_method,whether_status,project_assurance')
|
||||
|
||||
const matsname = ref('')
|
||||
const project_name = ref('')
|
||||
const project_code = ref('')
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const mode = ref('add')
|
||||
const showDialog = ref(false)
|
||||
const list1 = reactive([])
|
||||
const list2 = reactive([])
|
||||
const mode = ref('')
|
||||
import configs from "@/config"
|
||||
const base_url = configs.baseUrl + configs.urlPrefix
|
||||
import useUserStore from "@/stores/modules/user";
|
||||
@ -178,17 +173,7 @@ const handleAvatarSuccess_four = (
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
}
|
||||
//获取值
|
||||
const customEvent = (e: any) => {
|
||||
|
||||
|
||||
console.log(e, "e")
|
||||
formData.project_id = e.id;
|
||||
matsname.value = e.person
|
||||
project_name.value = e.name
|
||||
project_code.value = e.project_code
|
||||
showDialog.value = false;
|
||||
};
|
||||
// 弹窗标题
|
||||
const popupTitle = computed(() => {
|
||||
return mode.value == 'edit' ? '编辑投标决策' : '新增投标决策'
|
||||
@ -216,7 +201,16 @@ const formData = reactive({
|
||||
approve_id: 0
|
||||
})
|
||||
|
||||
//获取值
|
||||
const customEvent = (e: any) => {
|
||||
formData.project_id = e.id;
|
||||
matsname.value = e.person
|
||||
project_name.value = e.name
|
||||
project_code.value = e.project_code
|
||||
showDialog.value = false;
|
||||
};
|
||||
|
||||
if (props.project) customEvent(props.project)
|
||||
// 表单验证
|
||||
const formRules = reactive<any>({
|
||||
|
||||
|
@ -80,40 +80,9 @@
|
||||
<el-col :span="8">
|
||||
<el-form-item label="是否需要保证金" prop="is_margin">
|
||||
<el-input v-model="is_margin" clearable disabled placeholder="系统自动填写" />
|
||||
<!-- <el-radio-group v-model="is_margin" placeholder="请选择是否需要保证金">
|
||||
<el-radio v-for="(item, index) in dictData.whether_status" :key="index" :label="parseInt(item.value)">
|
||||
{{ item.name }}
|
||||
</el-radio>
|
||||
</el-radio-group> -->
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
<!-- <el-col :span="8"><el-form-item label="开标日期" prop="bid_opening_date">
|
||||
<el-date-picker class="flex-1 !flex" v-model="formData.bid_opening_date" clearable value-format="YYYY-MM-DD " placeholder="选择开标日期">
|
||||
</el-date-picker>
|
||||
<el-input v-model="bid_opening_date" clearable disabled placeholder="系统自动填写" />
|
||||
</el-form-item></el-col> <el-col :span="8"> -->
|
||||
|
||||
<!-- <el-col :span="8"><el-form-item label="保证金退还时间" prop="deposit_refund_time">
|
||||
<el-date-picker class="flex-1 !flex" v-model="formData.deposit_refund_time" clearable value-format="YYYY-MM-DD " placeholder="选择保证金退还时间">
|
||||
</el-date-picker>
|
||||
<el-input v-model="deposit_refund_time" clearable disabled placeholder="系统自动填写" />
|
||||
</el-form-item>
|
||||
</el-col>-->
|
||||
|
||||
|
||||
<!-- <el-col :span="8">
|
||||
<el-form-item label="招标项目概况" prop="bidding_project_overview">
|
||||
<el-input v-model="bidding_project_overview" clearable disabled placeholder="系统自动填写" />
|
||||
<el-input v-model="formData.bidding_project_overview" clearable placeholder="请输入招标项目概况" />
|
||||
</el-form-item></el-col> <el-col :span="8">
|
||||
<el-form-item label="项目简介" prop="project_introduction">
|
||||
<el-input v-model="project_introduction" clearable disabled placeholder="系统自动填写" />
|
||||
<el-input v-model="formData.project_introduction" clearable placeholder="请输入项目简介" />
|
||||
</el-form-item>
|
||||
</el-col> -->
|
||||
</el-row>
|
||||
<div class="tit">技术审查</div>
|
||||
<el-row>
|
||||
@ -156,7 +125,8 @@
|
||||
<el-row>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="总金额" prop="business_review_total_amount">
|
||||
<el-input v-model="formData.business_review_total_amount" clearable placeholder="请输入总金额" />
|
||||
<el-input v-model="formData.business_review_total_amount" clearable placeholder="系统自动计算"
|
||||
disabled />
|
||||
</el-form-item></el-col> <el-col :span="8">
|
||||
<el-form-item label="税率" prop="tax_rate">
|
||||
<el-select class="flex-1" v-model="formData.tax_rate" clearable placeholder="请选择税率">
|
||||
@ -264,13 +234,14 @@
|
||||
</el-table>
|
||||
</div>
|
||||
</el-form>
|
||||
<el-dialog v-model="showDialog" title="选择标书" width="70%">
|
||||
<biddocumentTable @customEvent="customEvent"></biddocumentTable>
|
||||
</el-dialog>
|
||||
<el-dialog v-model="showDialog1" title="选择产品" width="70%">
|
||||
<customDialog1 @customEvent="customEvent1"></customDialog1>
|
||||
</el-dialog>
|
||||
</popup>
|
||||
<el-dialog v-model="showDialog" title="选择标书" width="70%">
|
||||
<biddocumentTable @customEvent="customEvent"></biddocumentTable>
|
||||
</el-dialog>
|
||||
<el-dialog v-model="showDialog1" title="选择产品" width="70%">
|
||||
<customDialog1 @customEvent="customEvent1"></customDialog1>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -280,16 +251,10 @@ import Popup from '@/components/popup/index.vue'
|
||||
import customDialog1 from '@/components/product/index.vue'
|
||||
import biddocumentTable from "@/components/biddocument/index.vue"
|
||||
import { apiBidDocumentExaminationAdd, apiBidDocumentExaminationEdit, apiBidDocumentExaminationDetail } from '@/api/bid_document_examination'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import type { PropType } from 'vue'
|
||||
import { watch } from "vue"
|
||||
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
})
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
const { dictData } = useDictData('whether_status,tax_rate,pay_type,construction_funds_sources,bidding_method')
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
|
@ -57,11 +57,11 @@
|
||||
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</popup>
|
||||
<el-dialog v-model="showDialog" title="选择标书审查" width="70%">
|
||||
<biddocumentTable @customEvent="customEvent"></biddocumentTable>
|
||||
<el-dialog v-model="showDialog" title="选择标书审查" width="70%">
|
||||
<biddocumentTable @customEvent="customEvent"></biddocumentTable>
|
||||
</el-dialog>
|
||||
|
||||
</el-dialog>
|
||||
</popup>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
@ -71,19 +71,13 @@ import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import biddocumentTable from "@/components/document_examination/index.vue"
|
||||
import { apiBidResultAdd, apiBidResultEdit, apiBidResultDetail } from '@/api/bid_result'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import type { PropType } from 'vue'
|
||||
import configs from "@/config"
|
||||
import useUserStore from "@/stores/modules/user";
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
const { dictData } = useDictData('is_successful')
|
||||
|
||||
const base_url = configs.baseUrl + configs.urlPrefix
|
||||
const userStore = useUserStore();
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
|
@ -5,12 +5,14 @@
|
||||
|
||||
<el-form-item label="标书审查" prop="bid_document_examination_id">
|
||||
<el-select v-model="queryParams.bid_document_examination_id" clearable placeholder="请选择标书审查">
|
||||
<el-option v-for="(item, index) in documentList" :key="index" :label="item.bid_document_no" :value="parseInt(item.id)" />
|
||||
<el-option v-for="(item, index) in documentList" :key="index" :label="item.bid_document_no"
|
||||
:value="parseInt(item.id)" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="项目" prop="project_id">
|
||||
<el-select v-model="queryParams.project_id" clearable placeholder="请选择项目">
|
||||
<el-option v-for="(item, index) in projectList" :key="index" :label="item.name" :value="parseInt(item.id)" />
|
||||
<el-option v-for="(item, index) in projectList" :key="index" :label="item.name"
|
||||
:value="parseInt(item.id)" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
@ -64,7 +66,7 @@
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<div class="flex mt-4 justify-end">
|
||||
<div class="flex justify-end mt-4">
|
||||
<pagination v-model="pager" @change="getLists" />
|
||||
</div>
|
||||
</el-card>
|
||||
@ -80,7 +82,6 @@ import { apiBidResultLists, apiBidResultDelete, apiBidResultDetail } from '@/api
|
||||
import {
|
||||
apiBidDocumentExaminationLists
|
||||
} from '@/api/bid_document_examination'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { apiProjectLists } from '@/api/project'
|
||||
import feedback from '@/utils/feedback'
|
||||
import EditPopup from './edit.vue'
|
||||
|
@ -147,6 +147,8 @@ import type { PropType } from 'vue'
|
||||
import configs from "@/config"
|
||||
import useUserStore from "@/stores/modules/user";
|
||||
import bankaccountDialog from '@/components/bankaccount/index.vue'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
const { dictData } = useDictData('pay_type')
|
||||
|
||||
const base_url = configs.baseUrl + configs.urlPrefix
|
||||
const userStore = useUserStore();
|
||||
@ -181,12 +183,8 @@ const handleAvatarSuccess_four = (
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
}
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
|
@ -74,9 +74,6 @@
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import { bidapplyLists, bidapplyDelete, bidapplyDetail } from '@/api/bidbbond'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
const protype = reactive([])
|
||||
import feedback from '@/utils/feedback'
|
||||
import EditPopup from './edit.vue'
|
||||
import DetailPopup from './detail.vue'
|
||||
|
@ -16,7 +16,7 @@
|
||||
</el-form-item>
|
||||
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true"
|
||||
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-input v-model="project_name" clearable readonly placeholder="请输入项目名称" />
|
||||
<el-input v-model="project_name" clearable readonly placeholder="请输入项目名称" :disabled="project" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目编码" prop="project_id">
|
||||
<el-input v-model="project_code" disabled clearable placeholder="系统自动填写" />
|
||||
@ -70,15 +70,16 @@
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</popup>
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<projectTable @customEvent="customEvent"></projectTable>
|
||||
</el-dialog>
|
||||
<div v-if="showDialog1">
|
||||
<el-dialog v-model="showDialog1" title="选择需求" width="70%">
|
||||
<customerdemand @customEvent="customEvent1" :productid="formData.project_id"></customerdemand>
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<projectTable @customEvent="customEvent"></projectTable>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<div v-if="showDialog1">
|
||||
<el-dialog v-model="showDialog1" title="选择需求" width="70%">
|
||||
<customerdemand @customEvent="customEvent1" :productid="formData.project_id"></customerdemand>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</popup>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -92,11 +93,12 @@ import { getAll } from '@/api/org/organization'
|
||||
import projectTable from "@/components/project/index.vue"
|
||||
import customerdemand from "@/components/customerdemand/index.vue"
|
||||
import type { PropType } from 'vue'
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
let props = defineProps({
|
||||
// dictData: {
|
||||
// type: Object as PropType<Record<string, any[]>>,
|
||||
// default: () => ({})
|
||||
// }
|
||||
project: Object
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
@ -138,6 +140,23 @@ const handleAvatarSuccess_four = (
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
}
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
org_id: '',
|
||||
dept_id: '',
|
||||
project_id: '',
|
||||
customer_demand_id: '',
|
||||
competitor_name: '',
|
||||
competitor_contacts: '',
|
||||
competitor_contacts_phone: '',
|
||||
competitive_power: '',
|
||||
competitor_advantages: '',
|
||||
competitor_disadvantages: '',
|
||||
remark: '',
|
||||
annex: [],
|
||||
})
|
||||
// dialog
|
||||
const showDialog = ref(false)
|
||||
const showDialog1 = ref(false)
|
||||
@ -151,6 +170,9 @@ const customEvent = (e: any) => {
|
||||
.value = e.custom_name;
|
||||
showDialog.value = false;
|
||||
};
|
||||
if (props.project) customEvent(props.project);
|
||||
|
||||
|
||||
const customEvent1 = (e: any) => {
|
||||
formData.customer_demand_id = e.id;
|
||||
customer_demand_name.value = e.theme;
|
||||
@ -186,22 +208,7 @@ const xuDialog = () => {
|
||||
feedback.msgError('请先选择项目')
|
||||
}
|
||||
}
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
org_id: '',
|
||||
dept_id: '',
|
||||
project_id: '',
|
||||
customer_demand_id: '',
|
||||
competitor_name: '',
|
||||
competitor_contacts: '',
|
||||
competitor_contacts_phone: '',
|
||||
competitive_power: '',
|
||||
competitor_advantages: '',
|
||||
competitor_disadvantages: '',
|
||||
remark: '',
|
||||
annex: [],
|
||||
})
|
||||
|
||||
|
||||
const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
|
||||
const phoneReg = /^1[3|4|5|7|8][0-9]{9}$/
|
||||
|
@ -15,13 +15,13 @@
|
||||
<el-col :span="8">
|
||||
<el-form-item label="客户" prop="custom_id" @click="showDialog = true"
|
||||
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-input v-model="custom_name" readonly clearable placeholder="请选择客户" />
|
||||
<el-input v-model="custom_name" readonly clearable placeholder="请选择客户" :disabled="project" />
|
||||
</el-form-item> </el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目名称" prop="project_id" @click="tanchuan"
|
||||
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-input v-model="project_name" readonly clearable placeholder="请选择项目" />
|
||||
<el-input v-model="project_name" readonly clearable placeholder="请选择项目" :disabled="project" />
|
||||
</el-form-item></el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目编码">
|
||||
@ -36,11 +36,6 @@
|
||||
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-input v-model="formData.contract_name" clearable placeholder="请输入合同名称" />
|
||||
</el-form-item></el-col>
|
||||
<!-- <el-col :span="8">
|
||||
<el-form-item label="合同编号" prop="contract_code"
|
||||
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-input v-model="formData.contract_code" placeholder="系统自动填写" disabled />
|
||||
</el-form-item></el-col> -->
|
||||
<el-col :span="8">
|
||||
<el-form-item label="合同类型" prop="contract_type"
|
||||
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
|
||||
@ -199,22 +194,23 @@
|
||||
</el-table>
|
||||
</div>
|
||||
</el-form>
|
||||
<el-dialog v-model="showDialog" title="选择客户" width="70%">
|
||||
<customDialog @customEvent="customEvent"></customDialog>
|
||||
</el-dialog>
|
||||
<div v-if="showDialog1">
|
||||
<el-dialog v-model="showDialog1" title="选择标书" width="70%">
|
||||
<biddocumentTable @customEvent="customEvent1" :project_id="project_id"></biddocumentTable>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<div v-if="showDialog2">
|
||||
<el-dialog v-model="showDialog2" title="选择项目" width="70%">
|
||||
<projectTable @customEvent="customEvent2" :custom_id="formData.custom_id"></projectTable>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<personnelselector ref="personnel" @confirm="submituser" type="1"></personnelselector>
|
||||
<!-- <reviewprocess /> -->
|
||||
</popup>
|
||||
<el-dialog v-model="showDialog" title="选择客户" width="70%">
|
||||
<customDialog @customEvent="customEvent"></customDialog>
|
||||
</el-dialog>
|
||||
<div v-if="showDialog1">
|
||||
<el-dialog v-model="showDialog1" title="选择标书" width="70%">
|
||||
<biddocumentTable @customEvent="customEvent1" :project_id="project_id"></biddocumentTable>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<div v-if="showDialog2">
|
||||
<el-dialog v-model="showDialog2" title="选择项目" width="70%">
|
||||
<projectTable @customEvent="customEvent2" :custom_id="formData.custom_id"></projectTable>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<personnelselector ref="personnel" @confirm="submituser" type="1"></personnelselector>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -226,14 +222,13 @@ import projectTable from "@/components/project/index.vue"
|
||||
import personnelselector from '@/components/personnelselector/index.vue'
|
||||
import { apiContractAdd, apiContractEdit, apiContractDetail } from '@/api/contract'
|
||||
import { apireturnedLists } from "@/api/remittance.ts"
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
|
||||
import type { PropType } from 'vue'
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
let props = defineProps({
|
||||
project: Object
|
||||
})
|
||||
const { dictData } = useDictData('contract_type,contract_pricing_method,contract_status,pay_period')
|
||||
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
@ -272,13 +267,7 @@ const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
|
||||
|
||||
}
|
||||
const userEmail = (rule: any, value: string, callback: (arg0: Error | undefined) => void) => {
|
||||
|
||||
const mailReg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/
|
||||
// // if (!value) {
|
||||
// // return callback(new Error('邮箱不能为空'))
|
||||
// // }
|
||||
|
||||
|
||||
if (value && !mailReg.test(value)) {
|
||||
callback(new Error('请输入正确的邮箱格式'))
|
||||
} else {
|
||||
@ -311,30 +300,53 @@ const handleAvatarSuccess_four = (
|
||||
|
||||
);
|
||||
};
|
||||
|
||||
// 删除上传的文件
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
}
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
dept_id: '',
|
||||
org_id: '',
|
||||
approve_id: 1,
|
||||
custom_id: '',
|
||||
buy_bidding_document_id: '',
|
||||
contract_name: '',
|
||||
contract_code: '',
|
||||
contract_type: '',
|
||||
contract_pricing_method: '',
|
||||
party_a: '',
|
||||
party_a_contact_address: '',
|
||||
party_a_diretor: '',
|
||||
party_a_phone: '',
|
||||
party_a_mobile: '',
|
||||
party_a_email: '',
|
||||
project_id: "",
|
||||
party_b: '',
|
||||
party_b_contact_address: '',
|
||||
party_b_diretor: '',
|
||||
party_b_phone: '',
|
||||
party_b_mobile: '',
|
||||
party_b_email: '',
|
||||
amount: '',
|
||||
returned_money: [],
|
||||
business_director: '',
|
||||
contract_status: '',
|
||||
expire: '',
|
||||
contract_date: '',
|
||||
main_content: '',
|
||||
remark: '',
|
||||
annex: [],
|
||||
})
|
||||
|
||||
//打开弹窗
|
||||
|
||||
const userclick = () => {
|
||||
// console.log(personnel.value, '1111111')
|
||||
personnel.value.open()
|
||||
|
||||
}
|
||||
//获取回款计划
|
||||
const paymentplanList = (id: any) => {
|
||||
// paymentplanLists({ 'page_no': 1, 'page_size': 5000, 'contract_type': 1, 'contract_id': id }).then((res) => {
|
||||
// const data = res.lists.map((item: any) => ({
|
||||
// 'period': item.period,
|
||||
// 'return_date': item.return_date,
|
||||
// 'amount': item.amount,
|
||||
// 'remark': item.remark,
|
||||
// }))
|
||||
// paymentList.splice(0, paymentList.length, ...data);
|
||||
// })
|
||||
}
|
||||
|
||||
//确认
|
||||
const submituser = (e: any) => {
|
||||
formData.business_director = e.id;
|
||||
@ -349,11 +361,11 @@ const tanchuan = () => {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//获取值
|
||||
const customEvent = (e: any) => {
|
||||
formData.custom_id = e.id;
|
||||
custom_name.value = e.name;
|
||||
// console.log(custom_name.value, e.name)
|
||||
bidding_code.value = ''
|
||||
project_name.value = ''
|
||||
project_code.value = ''
|
||||
@ -361,11 +373,10 @@ const customEvent = (e: any) => {
|
||||
};
|
||||
const customEvent1 = (e: any) => {
|
||||
formData.buy_bidding_document_id = e.id;
|
||||
project_name.value = e.project_name;
|
||||
project_code.value = e.project_code
|
||||
bidding_code.value = e.bid_document_no
|
||||
showDialog1.value = false;
|
||||
};
|
||||
|
||||
const customEvent2 = (e: any) => {
|
||||
project_id.value = e.id;
|
||||
formData.project_id = e.id;
|
||||
@ -375,6 +386,18 @@ const customEvent2 = (e: any) => {
|
||||
showDialog2.value = false;
|
||||
};
|
||||
|
||||
|
||||
if (props.project) {
|
||||
formData.custom_id = props.project.custom_id;
|
||||
custom_name.value = props.project.custom_name;
|
||||
project_id.value = props.project.id;
|
||||
formData.project_id = props.project.id;
|
||||
project_name.value = props.project.name;
|
||||
project_code.value = props.project.project_code;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//监听输入 金额大写
|
||||
const amountinput = (e) => {
|
||||
// console.log(e)
|
||||
@ -415,41 +438,6 @@ const popupTitle = computed(() => {
|
||||
return mode.value == 'edit' ? '编辑项目合同' : '新增项目合同'
|
||||
})
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
dept_id: '',
|
||||
org_id: '',
|
||||
approve_id: 1,
|
||||
custom_id: '',
|
||||
buy_bidding_document_id: '',
|
||||
contract_name: '',
|
||||
contract_code: '',
|
||||
contract_type: '',
|
||||
contract_pricing_method: '',
|
||||
party_a: '',
|
||||
party_a_contact_address: '',
|
||||
party_a_diretor: '',
|
||||
party_a_phone: '',
|
||||
party_a_mobile: '',
|
||||
party_a_email: '',
|
||||
project_id: "",
|
||||
party_b: '',
|
||||
party_b_contact_address: '',
|
||||
party_b_diretor: '',
|
||||
party_b_phone: '',
|
||||
party_b_mobile: '',
|
||||
party_b_email: '',
|
||||
amount: '',
|
||||
returned_money: [],
|
||||
business_director: '',
|
||||
contract_status: '',
|
||||
expire: '',
|
||||
contract_date: '',
|
||||
main_content: '',
|
||||
remark: '',
|
||||
annex: [],
|
||||
})
|
||||
|
||||
|
||||
// 表单验证
|
||||
|
@ -71,7 +71,7 @@
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button v-perms="['contract.contract/delete']" type="danger" link
|
||||
@click="handleDelete(row.approve_id)">
|
||||
@click="handleDelete(row.id)">
|
||||
删除
|
||||
</el-button>
|
||||
<el-button v-perms="['contract.contract/detail']" link @click="handleDetail(row)">
|
||||
@ -149,6 +149,7 @@ const handleEdit = async (data: any) => {
|
||||
|
||||
// 删除
|
||||
const handleDelete = async (id: number | any[]) => {
|
||||
console.log(id, "id")
|
||||
await feedback.confirm('确定要删除?')
|
||||
await apiContractDelete({ id })
|
||||
getLists()
|
||||
|
@ -145,11 +145,11 @@
|
||||
</el-form-item></el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<el-dialog v-model="showDialog" title="选择合同" width="70%">
|
||||
<proontractTable @customEvent="customEvent" :project_id="project?.id || ''"></proontractTable>
|
||||
</el-dialog>
|
||||
</popup>
|
||||
<el-dialog v-model="showDialog" title="选择合同" width="70%">
|
||||
<proontractTable @customEvent="customEvent"></proontractTable>
|
||||
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -157,15 +157,14 @@
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import { apiContractNegotiationAdd, apiContractNegotiationEdit, apiContractNegotiationDetail } from '@/api/contract_negotiation'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import proontractTable from "@/components/contract/index.vue"
|
||||
import type { PropType } from 'vue'
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
let props = defineProps({
|
||||
project: Object
|
||||
})
|
||||
|
||||
const { dictData } = useDictData('negotiation_type,contract_type,contract_pricing_method')
|
||||
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
@ -247,13 +246,15 @@ const formData = reactive({
|
||||
material_costs: '',
|
||||
warranty_amount: '',
|
||||
warranty_expire_date: '',
|
||||
|
||||
negotiation_content: '',
|
||||
negotiation_detail: '',
|
||||
negotiation_quotation: [],
|
||||
negotiation_basis: [],
|
||||
})
|
||||
|
||||
if (props.project) {
|
||||
console.log(props.project)
|
||||
}
|
||||
//获取值
|
||||
const customEvent = (e: any) => {
|
||||
formData.contract_id = e.id;
|
||||
|
@ -16,7 +16,7 @@
|
||||
</el-form-item>
|
||||
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true"
|
||||
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
|
||||
<el-input v-model="project_name" clearable placeholder="请选择项目" />
|
||||
<el-input v-model="project_name" clearable placeholder="请选择项目" :disabled="project" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目编码" prop="project_id">
|
||||
<el-input v-model="project_code
|
||||
@ -71,8 +71,7 @@ import { deptAll } from '@/api/org/department'
|
||||
import { getAll } from '@/api/org/organization'
|
||||
import projectTable from "@/components/project/index.vue"
|
||||
import { apiCustomerDemandAdd, apiCustomerDemandEdit, apiCustomerDemandDetail } from '@/api/customer_demand'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import type { PropType } from 'vue'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
// 上传文件
|
||||
import annexUpload from "@/components/annexUpload/index.vue"
|
||||
const handleAvatarSuccess_four = (response: any) => {
|
||||
@ -82,12 +81,11 @@ const handleAvatarSuccess_four = (response: any) => {
|
||||
// 删除上传的文件
|
||||
const delFileFn = (index: number) => { formData.annex.splice(index, 1) }
|
||||
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
let props = defineProps({
|
||||
project: Object
|
||||
})
|
||||
const { dictData } = useDictData('importance')
|
||||
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
@ -102,17 +100,8 @@ const custom_name
|
||||
= ref('')
|
||||
const formDataannex = reactive([])
|
||||
|
||||
// dialog
|
||||
const showDialog = ref(false)
|
||||
const customEvent = (e: any) => {
|
||||
formData.project_id = e.id;
|
||||
project_name.value = e.name;
|
||||
project_code
|
||||
.value = e.project_code;
|
||||
custom_name
|
||||
.value = e.custom_name;
|
||||
showDialog.value = false;
|
||||
};
|
||||
|
||||
|
||||
|
||||
const getlista = () => {
|
||||
getAll().then((res) => {
|
||||
@ -152,24 +141,22 @@ const formData = reactive({
|
||||
demand_content: '',
|
||||
annex: [],
|
||||
})
|
||||
const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
|
||||
const phoneReg = /^1[3|4|5|7|8][0-9]{9}$/
|
||||
// if (!value) {
|
||||
// return callback(new Error('电话号码不能为空'))
|
||||
// }
|
||||
if (value) {
|
||||
setTimeout(() => {
|
||||
if (phoneReg.test(value)) {
|
||||
callback()
|
||||
} else {
|
||||
callback(new Error('电话号码格式不正确'))
|
||||
}
|
||||
|
||||
}, 100)
|
||||
}
|
||||
// dialog
|
||||
const showDialog = ref(false)
|
||||
const customEvent = (e: any) => {
|
||||
formData.project_id = e.id;
|
||||
project_name.value = e.name;
|
||||
project_code
|
||||
.value = e.project_code;
|
||||
custom_name
|
||||
.value = e.custom_name;
|
||||
showDialog.value = false;
|
||||
};
|
||||
|
||||
if (props.project) {
|
||||
customEvent(props.project)
|
||||
}
|
||||
|
||||
// 表单验证
|
||||
const formRules = reactive<any>({
|
||||
|
||||
|
@ -16,7 +16,7 @@
|
||||
</el-form-item>
|
||||
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true"
|
||||
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-input v-model="project_name" readonly clearable placeholder="请输入项目名称" />
|
||||
<el-input v-model="project_name" readonly clearable placeholder="请输入项目名称" :disabled="project" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目编码" prop="project_id">
|
||||
<el-input v-model="project_code" disabled clearable placeholder="系统自动填写" />
|
||||
@ -42,21 +42,23 @@
|
||||
<el-form-item label="客户反馈" prop="customer_feedback">
|
||||
<el-input v-model="formData.customer_feedback" clearable placeholder="请输入客户反馈" />
|
||||
</el-form-item>
|
||||
<el-form-item label="附件" prop="field127">
|
||||
<el-form-item label="附12件" prop="field127">
|
||||
<annexUpload :annex="formData.annex" @handleAvatarSuccess="handleAvatarSuccess_four"
|
||||
@delFile="delFileFn" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</popup>
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<projectTable @customEvent="customEvent"></projectTable>
|
||||
</el-dialog>
|
||||
|
||||
<div v-if="showDialog1">
|
||||
<el-dialog v-model="showDialog1" title="选择需求" width="70%">
|
||||
<customerdemand @customEvent="customEvent1" :productid="formData.project_id"></customerdemand>
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<projectTable @customEvent="customEvent"></projectTable>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
<div v-if="showDialog1">
|
||||
<el-dialog v-model="showDialog1" title="选择需求" width="70%" :z-index="99999">
|
||||
<customerdemand @customEvent="customEvent1" :productid="formData.project_id">
|
||||
</customerdemand>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</popup>
|
||||
|
||||
|
||||
</div>
|
||||
</template>
|
||||
@ -68,7 +70,6 @@ import { deptAll } from '@/api/org/department'
|
||||
import { getAll } from '@/api/org/organization'
|
||||
import projectTable from "@/components/project/index.vue"
|
||||
import customerdemand from "@/components/customerdemand/index.vue"
|
||||
|
||||
import { apiCustomerDemandSolutionAdd, apiCustomerDemandSolutionEdit, apiCustomerDemandSolutionDetail } from '@/api/customer_demand_solution'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import type { PropType } from 'vue'
|
||||
@ -82,13 +83,27 @@ const handleAvatarSuccess_four = (response: any) => {
|
||||
};
|
||||
// 删除上传的文件
|
||||
const delFileFn = (index: number) => { formData.annex.splice(index, 1) }
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
org_id: '',
|
||||
dept_id: '',
|
||||
project_id: '',
|
||||
customer_demand_id: '',
|
||||
theme: '',
|
||||
submission_time: '',
|
||||
solution_content: '',
|
||||
customer_feedback: '',
|
||||
annex: [],
|
||||
})
|
||||
|
||||
|
||||
defineProps({
|
||||
let props = defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
},
|
||||
project: Object
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
@ -107,6 +122,7 @@ const formDataannex = reactive([])
|
||||
|
||||
const showDialog = ref(false)
|
||||
const showDialog1 = ref(false)
|
||||
|
||||
const customEvent = (e: any) => {
|
||||
formData.project_id = e.id;
|
||||
project_name.value = e.name;
|
||||
@ -116,6 +132,11 @@ const customEvent = (e: any) => {
|
||||
.value = e.custom_name;
|
||||
showDialog.value = false;
|
||||
};
|
||||
|
||||
if (props.project) {
|
||||
customEvent(props.project)
|
||||
}
|
||||
|
||||
const customEvent1 = (e: any) => {
|
||||
formData.customer_demand_id = e.id;
|
||||
customer_demand_name.value = e.theme;
|
||||
@ -145,19 +166,6 @@ const popupTitle = computed(() => {
|
||||
return mode.value == 'edit' ? '编辑客户需求解决方案' : '新增客户需求解决方案'
|
||||
})
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
org_id: '',
|
||||
dept_id: '',
|
||||
project_id: '',
|
||||
customer_demand_id: '',
|
||||
theme: '',
|
||||
submission_time: '',
|
||||
solution_content: '',
|
||||
customer_feedback: '',
|
||||
annex: [],
|
||||
})
|
||||
|
||||
|
||||
// 表单验证
|
||||
|
@ -119,7 +119,7 @@
|
||||
|
||||
|
||||
<el-dialog v-model="showDialog" title="选择供应商" width="70%">
|
||||
<supplier @customEvent="customEvent"></supplier>
|
||||
<supplier @customEvent="customEvent" :project_id="project?.id || ''"></supplier>
|
||||
</el-dialog>
|
||||
<div v-if="formData.contract_cate == 1 && showDialog1">
|
||||
<el-dialog v-model="showDialog1" title="选择采购合同" width="70%">
|
||||
@ -155,6 +155,9 @@ import { isEmail, isIdCard, isPhone } from '@/utils/validate'
|
||||
import type { PropType } from 'vue'
|
||||
import configs from "@/config"
|
||||
import useUserStore from "@/stores/modules/user";
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
|
||||
const { dictData } = useDictData('pay_status,pay_period')
|
||||
const protype = reactive([])
|
||||
const base_url = configs.baseUrl + configs.urlPrefix
|
||||
const userStore = useUserStore();
|
||||
@ -193,13 +196,6 @@ const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
|
||||
|
||||
}
|
||||
const userEmail = (rule: any, value: string, callback: (arg0: Error | undefined) => void) => {
|
||||
|
||||
// const mailReg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/
|
||||
// // if (!value) {
|
||||
// // return callback(new Error('邮箱不能为空'))
|
||||
// // }
|
||||
|
||||
|
||||
if (value && !mailReg.test(value)) {
|
||||
callback(new Error('请输入正确的邮箱格式'))
|
||||
} else {
|
||||
@ -212,10 +208,7 @@ const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
}
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
project: Object
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
|
@ -41,11 +41,9 @@
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column label="序号" type="index" width="55" />
|
||||
<el-table-column label="供应商名称" prop="supplier_name" show-overflow-tooltip />
|
||||
|
||||
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
|
||||
<el-table-column label="合同编号" prop="contract_no" show-overflow-tooltip />
|
||||
<el-table-column label="计划付款日期" prop="pay_date" show-overflow-tooltip />
|
||||
|
||||
<el-table-column label="金额" prop="amount" show-overflow-tooltip />
|
||||
<el-table-column label="期次" prop="period" show-overflow-tooltip>
|
||||
<template #default="{ row }">
|
||||
|
@ -153,7 +153,7 @@
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-dialog v-model="showDialog" title="选择供应商" width="70%">
|
||||
<suppliertable @customEvent="customEvent"></suppliertable>
|
||||
<suppliertable @customEvent="customEvent" :project_id="project?.id || ''"></suppliertable>
|
||||
</el-dialog>
|
||||
|
||||
<div v-if="formData.contract_cate == 1 && showDialog1">
|
||||
@ -192,10 +192,8 @@ import { isEmail, isIdCard, isPhone } from '@/utils/validate'
|
||||
import type { PropType } from 'vue'
|
||||
import configs from "@/config"
|
||||
import useUserStore from "@/stores/modules/user";
|
||||
import { useDictData } from "@/hooks/useDictOptions"
|
||||
|
||||
|
||||
// const { dictData } = useDictData('tax_rate ')
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
const { dictData } = useDictData('invoice_type,contract_type,tax_rate')
|
||||
|
||||
const protype = reactive([])
|
||||
const base_url = configs.baseUrl + configs.urlPrefix
|
||||
@ -210,7 +208,6 @@ const contract_no = ref('')
|
||||
const supplier_name = ref('')
|
||||
const supplier_code = ref('')
|
||||
const userInfo = userStore.userInfo
|
||||
// console.log(dictData, '222222')
|
||||
// 上传文件
|
||||
const handleAvatarSuccess_four = (
|
||||
response,
|
||||
@ -243,15 +240,13 @@ const userEmail = (rule: any, value: string, callback: (arg0: Error | undefined)
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
// 删除上传的文件
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
}
|
||||
const props = defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
project: Object
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
@ -285,8 +280,8 @@ const customEvent1 = (e: any) => {
|
||||
|
||||
//获取税率Name
|
||||
const getTaxValue = (value) => {
|
||||
let i = props.dictData.tax_rate.findIndex((item) => item.value == value)
|
||||
return (props.dictData.tax_rate[i]?.name / 100) || 0
|
||||
let i = dictData.tax_rate.findIndex((item) => item.value == value)
|
||||
return (dictData.tax_rate[i]?.name / 100) || 0
|
||||
}
|
||||
|
||||
//监听输入
|
||||
|
@ -28,7 +28,7 @@
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true"
|
||||
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
|
||||
<el-input v-model="project_name" readonly clearable placeholder="请选择项目" />
|
||||
<el-input v-model="project_name" readonly clearable placeholder="请选择项目" :disabled="project" />
|
||||
</el-form-item> </el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目编码" prop="project_id"
|
||||
@ -234,19 +234,19 @@
|
||||
|
||||
</el-row>
|
||||
</el-form>
|
||||
</popup>
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<projectTable @customEvent="customEvent"></projectTable>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog v-model="showDialog1" title="选择供应商" width="70%">
|
||||
<suppliertable @customEvent="customEvent1"></suppliertable>
|
||||
</el-dialog>
|
||||
<div v-if="showDialog2">
|
||||
<el-dialog v-model="showDialog2" title="选择产品" width="70%">
|
||||
<prodctTable @customEvent="customEvent2" :project_id="formData.project_id"></prodctTable>
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<projectTable @customEvent="customEvent"></projectTable>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<el-dialog v-model="showDialog1" title="选择供应商" width="70%">
|
||||
<suppliertable @customEvent="customEvent1" :project_id="project?.id || ''"></suppliertable>
|
||||
</el-dialog>
|
||||
<div v-if="showDialog2">
|
||||
<el-dialog v-model="showDialog2" title="选择产品" width="70%">
|
||||
<prodctTable @customEvent="customEvent2" :project_id="formData.project_id"></prodctTable>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</popup>
|
||||
|
||||
|
||||
</div>
|
||||
</template>
|
||||
@ -256,6 +256,7 @@ import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import projectTable from '@/components/project/index.vue'
|
||||
import suppliertable from '@/components/supplier/index.vue'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import prodctTable from '@/components/Materialprocurement_details/index.vue'
|
||||
const list1 = reactive([])
|
||||
const list2 = reactive([])
|
||||
@ -264,15 +265,12 @@ import { getAll } from '@/api/org/organization'
|
||||
import { paymentplanLists } from '@/api/paymentplan'
|
||||
import { apiProcurementContractDetailLists } from '@/api/procurement_contract_detail'
|
||||
import { apiProcurementContractAdd, apiProcurementContractEdit, apiProcurementContractDetail } from '@/api/procurement_contract'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import type { PropType } from 'vue'
|
||||
const { dictData } = useDictData('procurement_contract_type,pay_type,tax_rate,account_period,pay_period')
|
||||
let props = defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
},
|
||||
|
||||
project: Object
|
||||
})
|
||||
|
||||
console.log(props.project, "project")
|
||||
import { toChinesNum } from "@/utils/util";
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
@ -443,18 +441,20 @@ const customEvent = (e: any) => {
|
||||
project_code.value = e.project_code
|
||||
showDialog.value = false;
|
||||
materialList.splice(0, 9999)
|
||||
|
||||
|
||||
|
||||
};
|
||||
const customEvent1 = (e: any) => {
|
||||
|
||||
|
||||
if (props.project) customEvent(props.project)
|
||||
|
||||
const customEvent1 = (e: any) => {
|
||||
formData.supplier_id = e.id;
|
||||
supplier_code.value = e.supplier_code
|
||||
supplier_name.value = e.supplier_name
|
||||
showDialog1.value = false;
|
||||
};
|
||||
const customEvent2 = (e: any) => {
|
||||
|
||||
|
||||
materialList.push({
|
||||
'material_purchase_request_detail_id': e.id,
|
||||
'material_name': e.material_name,
|
||||
@ -465,13 +465,14 @@ const customEvent2 = (e: any) => {
|
||||
'material_specs': e.material_specs,
|
||||
});
|
||||
showDialog2.value = false;
|
||||
console.log(e, 'e')
|
||||
}
|
||||
|
||||
|
||||
//获取税率Name
|
||||
const getTaxValue = (value) => {
|
||||
let i = props.dictData.tax_rate.findIndex((item) => item.value == value)
|
||||
return (1 - props.dictData.tax_rate[i]?.name / 100) || 0
|
||||
let i = dictData.tax_rate.findIndex((item) => item.value == value)
|
||||
return (1 - dictData.tax_rate[i]?.name / 100) || 0
|
||||
}
|
||||
|
||||
//金额计算
|
||||
|
@ -84,7 +84,6 @@
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import { apiProcurementContractLists, apiProcurementContractDelete, apiProcurementContractDetail } from '@/api/procurement_contract'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import feedback from '@/utils/feedback'
|
||||
import { apiProjectLists } from '@/api/project'
|
||||
import { apisupplierLists } from '@/api/suppler_list'
|
||||
|
155
src/views/project/components/manpower.vue
Normal file
155
src/views/project/components/manpower.vue
Normal file
@ -0,0 +1,155 @@
|
||||
<template>
|
||||
<el-tabs v-model="active" class="demo-tabs">
|
||||
|
||||
<el-tab-pane label="项目人员" name="first-1">
|
||||
<myTable :baseData="baseData" v-if="active == 'first-1'"></myTable>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="劳动合同" name="first-2">
|
||||
<myTable :baseData="baseData5" v-if="active == 'first-2'"></myTable>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="保险记录" name="first-3">
|
||||
<myTable :baseData="baseData1" v-if="active == 'first-3'"></myTable>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="项目考勤" name="first-4">
|
||||
<myTable :baseData="baseData2" v-if="active == 'first-4'"></myTable>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="考勤明细" name="first-5">
|
||||
<myTable :baseData="baseData3" v-if="active == 'first-5'"></myTable>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="工资付款" name="first-6">
|
||||
<myTable :baseData="baseData4" v-if="active == 'first-6'"></myTable>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
|
||||
import { ref, reactive, defineProps } from "vue"
|
||||
import myTable from "./myTable.vue"
|
||||
import { projectpersonnelLists } from '@/api/project_personnel'
|
||||
import { projectlaborcontractLists } from '@/api/project_labor_contract'
|
||||
import { insurancemanagementLists } from '@/api/project_insurance_management'
|
||||
import { attendanceRecordLists } from '@/api/project_attendance_record'
|
||||
import { attendancedetailLists } from '@/api/project_attendance_detail'
|
||||
import { projectsalaryDetailLists } from '@/api/project_salary_detail'
|
||||
|
||||
const active = ref('first-1')
|
||||
const props = defineProps({
|
||||
project_id: Number
|
||||
})
|
||||
|
||||
const baseData = reactive({
|
||||
fetchFun: projectpersonnelLists,
|
||||
tit: "",
|
||||
queryParams: { project_id: props.project_id },
|
||||
columnList: [
|
||||
{ label: '姓名', prop: 'name' },
|
||||
{ label: '身份证号', prop: 'idcard' },
|
||||
{ label: '手机号', prop: 'mobile' },
|
||||
{ label: '工种', prop: 'work_type_text' },
|
||||
{ label: '人工单价', prop: 'unit_price' },
|
||||
{ label: '每日生活费', prop: 'price' },
|
||||
{ label: '期初收入', prop: 'opening_income' },
|
||||
{ label: '日结收入', prop: 'daily_income' },
|
||||
{ label: '完工量收入', prop: 'work_income' },
|
||||
{ label: '总收入', prop: 'total_income' },
|
||||
{ label: '总支出', prop: 'pay_out' },
|
||||
{ label: '余额', prop: 'balance' },
|
||||
]
|
||||
})
|
||||
|
||||
const baseData1 = reactive({
|
||||
fetchFun: insurancemanagementLists,
|
||||
tit: "",
|
||||
queryParams: { project_id: props.project_id },
|
||||
columnList: [
|
||||
{ label: '姓名', prop: 'project_name' },
|
||||
{ label: '身份证号', prop: 'person_idcard' },
|
||||
{ label: '投保日期', prop: 'insurance_date' },
|
||||
{ label: '到期日期', prop: 'due_date' },
|
||||
{ label: '保险种类', prop: 'type_text' },
|
||||
{ label: '保单号', prop: 'insurance_no' },
|
||||
{ label: '投保金额(万元)', prop: 'insured_amount' },
|
||||
{ label: '保险公司', prop: 'insurance_company' },
|
||||
|
||||
]
|
||||
})
|
||||
|
||||
const baseData2 = reactive({
|
||||
fetchFun: attendanceRecordLists,
|
||||
tit: "",
|
||||
queryParams: { project_id: props.project_id },
|
||||
columnList: [
|
||||
{ label: '日记工单号', prop: 'attendance_code' },
|
||||
{ label: '日期', prop: 'attendance_date' },
|
||||
{ label: '出勤人数', prop: 'competitor_contacts_phone' },
|
||||
{ label: '记工数量', prop: 'work_record_num_total' },
|
||||
{ label: '日工资合计', prop: 'daily_salary_total' },
|
||||
{ label: '日生活费合计', prop: 'daily_living_total' },
|
||||
{ label: '日补贴合计', prop: 'daily_subsidy_total' },
|
||||
{ label: '日其它合计', prop: 'daily_other_total' },
|
||||
{ label: '日收入合计', prop: 'daily_income_total' },
|
||||
{ label: '备注', prop: 'remark' },
|
||||
|
||||
]
|
||||
})
|
||||
|
||||
const baseData3 = reactive({
|
||||
fetchFun: attendancedetailLists,
|
||||
tit: "",
|
||||
queryParams: { project_id: props.project_id },
|
||||
columnList: [
|
||||
{ label: '日记工单号', prop: 'attendance_code' },
|
||||
{ label: '日期', prop: 'attendance_date' },
|
||||
{ label: '姓名', prop: 'person_name' },
|
||||
{ label: '身份证号', prop: 'person_idcard' },
|
||||
{ label: '工种', prop: 'work_type_text' },
|
||||
{ label: '上班时间', prop: 'work_start_time' },
|
||||
{ label: '下班时间', prop: 'work_end_time' },
|
||||
{ label: '记工数量', prop: 'work_record_num' },
|
||||
{ label: '日工资', prop: 'daily_salary' },
|
||||
{ label: '日生活费', prop: 'daily_living' },
|
||||
{ label: '日补贴', prop: 'daily_subsidy' },
|
||||
{ label: '日其它', prop: 'daily_other' },
|
||||
{ label: '日收入', prop: 'daily_income' },
|
||||
{ label: '备注', prop: 'remark' },
|
||||
|
||||
]
|
||||
})
|
||||
|
||||
const baseData4 = reactive({
|
||||
fetchFun: projectsalaryDetailLists,
|
||||
tit: "",
|
||||
queryParams: { project_id: props.project_id },
|
||||
columnList: [
|
||||
{ label: '工资付款单号', prop: 'payment_code' },
|
||||
{ label: '日期', prop: 'apply_date' },
|
||||
{ label: '姓名', prop: 'person_name' },
|
||||
{ label: '身份证号', prop: 'person_idcard' },
|
||||
{ label: '工种', prop: 'person_work_type_text' },
|
||||
{ label: '总收入', prop: 'total_income' },
|
||||
{ label: '总支出', prop: 'total_pay_out' },
|
||||
{ label: '未发放', prop: 'balance' },
|
||||
{ label: '本次付款金额', prop: 'apply_amount' },
|
||||
{ label: '备注', prop: 'remark' },
|
||||
|
||||
]
|
||||
})
|
||||
|
||||
const baseData5 = reactive({
|
||||
fetchFun: projectlaborcontractLists,
|
||||
tit: "",
|
||||
queryParams: { project_id: props.project_id },
|
||||
columnList: [
|
||||
{ label: '项目名称', prop: 'project_name' },
|
||||
{ label: '身份证号', prop: 'person_idcard' },
|
||||
{ label: '合同状态', prop: 'contract_status_text' },
|
||||
{ label: '合同类别', prop: 'contract_type_text' },
|
||||
{ label: '合同名称', prop: 'contract_title_text' },
|
||||
{ label: '合同签定日期', prop: 'signing_date' },
|
||||
{ label: '起始时间', prop: 'start_date' },
|
||||
{ label: '终止时间', prop: 'end_date' },
|
||||
]
|
||||
})
|
||||
|
||||
</script>
|
@ -95,112 +95,6 @@ const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
|
||||
|
||||
|
||||
const pager12 = reactive({
|
||||
page_size: 10,
|
||||
page_no: 1,
|
||||
project_id: ""
|
||||
})
|
||||
const pager13 = reactive({
|
||||
page_size: 10,
|
||||
page_no: 1,
|
||||
project_id: ""
|
||||
})
|
||||
const pager14 = reactive({
|
||||
page_size: 10,
|
||||
page_no: 1,
|
||||
project_id: ""
|
||||
})
|
||||
|
||||
const pager15 = reactive({
|
||||
page_size: 10,
|
||||
page_no: 1,
|
||||
project_id: ""
|
||||
})
|
||||
const pager16 = reactive({
|
||||
page_size: 10,
|
||||
page_no: 1,
|
||||
project_id: ""
|
||||
})
|
||||
|
||||
const pager17 = reactive({
|
||||
page_size: 10,
|
||||
page_no: 1,
|
||||
project_id: ""
|
||||
})
|
||||
const pager18 = reactive({
|
||||
page_size: 10,
|
||||
page_no: 1,
|
||||
project_id: ""
|
||||
})
|
||||
|
||||
|
||||
|
||||
const pager21 = reactive({
|
||||
page_size: 10,
|
||||
page_no: 1,
|
||||
project_id: ""
|
||||
})
|
||||
|
||||
|
||||
const pager22 = reactive({
|
||||
page_size: 10,
|
||||
page_no: 1,
|
||||
project_id: ""
|
||||
})
|
||||
|
||||
|
||||
const pager23 = reactive({
|
||||
page_size: 10,
|
||||
page_no: 1,
|
||||
project_id: ""
|
||||
})
|
||||
|
||||
|
||||
const pager24 = reactive({
|
||||
page_size: 10,
|
||||
page_no: 1,
|
||||
project_id: ""
|
||||
})
|
||||
const pager25 = reactive({
|
||||
page_size: 10,
|
||||
page_no: 1,
|
||||
project_id: ""
|
||||
})
|
||||
const pager26 = reactive({
|
||||
page_size: 10,
|
||||
page_no: 1,
|
||||
project_id: ""
|
||||
})
|
||||
const pager27 = reactive({
|
||||
page_size: 10,
|
||||
page_no: 1,
|
||||
project_id: ""
|
||||
})
|
||||
const pager28 = reactive({
|
||||
page_size: 10,
|
||||
page_no: 1,
|
||||
project_id: ""
|
||||
})
|
||||
const pager29 = reactive({
|
||||
page_size: 10,
|
||||
page_no: 1,
|
||||
project_id: ""
|
||||
})
|
||||
const pager30 = reactive({
|
||||
page_size: 10,
|
||||
page_no: 1,
|
||||
project_id: ""
|
||||
})
|
||||
const pager31 = reactive({
|
||||
page_size: 10,
|
||||
page_no: 1,
|
||||
project_id: ""
|
||||
})
|
||||
const pager32 = reactive({
|
||||
page_size: 10,
|
||||
page_no: 1,
|
||||
project_id: ""
|
||||
})
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true">
|
||||
<el-input v-model="project_name" clearable placeholder="请输入项目名称" />
|
||||
<el-input v-model="project_name" clearable placeholder="请输入项目名称" :disabled="project" />
|
||||
</el-form-item> </el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目编码" prop="project_id">
|
||||
@ -85,29 +85,23 @@
|
||||
<el-input v-model="formData.daily_income" type="number" clearable placeholder="请输入日收入" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="formData.remark" clearable placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</el-row>
|
||||
</el-form>
|
||||
</popup>
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<projectDialog @customEvent="customEvent"></projectDialog>
|
||||
</el-dialog>
|
||||
<div v-if="showDialog1">
|
||||
<el-dialog v-model="showDialog1" title="选择项目人员" width="70%">
|
||||
<customDialog @customEvent="customEvent1" :project_id="formData.project_id"></customDialog>
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<projectDialog @customEvent="customEvent"></projectDialog>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<div v-if="showDialog1">
|
||||
<el-dialog v-model="showDialog1" title="选择项目人员" width="70%">
|
||||
<customDialog @customEvent="customEvent1" :project_id="formData.project_id"></customDialog>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</popup>
|
||||
|
||||
|
||||
</div>
|
||||
</template>
|
||||
@ -118,13 +112,11 @@ import Popup from '@/components/popup/index.vue'
|
||||
import projectDialog from '@/components/project/index.vue'
|
||||
import { attendancedetailAdd, attendancedetailEdit, attendancedetailDetail } from '@/api/project_attendance_detail'
|
||||
import customDialog from '@/components/project_personnel/index.vue'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import type { PropType } from 'vue'
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
const { dictData } = useDictData('labor_contract_status,labor_contract_type,labor_contract_name')
|
||||
let props = defineProps({
|
||||
project: Object
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
@ -142,8 +134,26 @@ import useUserStore from "@/stores/modules/user";
|
||||
const base_url = configs.baseUrl + configs.urlPrefix
|
||||
const userStore = useUserStore();
|
||||
const formDataannex = reactive([])
|
||||
import feedback from '@/utils/feedback'
|
||||
const userInfo = userStore.userInfo
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
project_id: '',
|
||||
person_id: '',
|
||||
attendance_date: '',
|
||||
work_start_time: '',
|
||||
work_end_time: '',
|
||||
work_record_num: '',
|
||||
daily_salary: '',
|
||||
daily_living: '',
|
||||
daily_subsidy: '',
|
||||
daily_other: '',
|
||||
daily_income: '',
|
||||
remark: '',
|
||||
people: "",
|
||||
person_name: ""
|
||||
|
||||
})
|
||||
//获取值
|
||||
const customEvent = (e) => {
|
||||
formData.project_id = e.id
|
||||
@ -154,8 +164,11 @@ const customEvent = (e) => {
|
||||
showDialog.value = false
|
||||
formData.people = ''
|
||||
console.log(people.value, "name")
|
||||
|
||||
}
|
||||
|
||||
|
||||
if (props.project) customEvent(props.project);
|
||||
|
||||
const customEvent1 = (e) => {
|
||||
formData.person_id = e.id
|
||||
formData.people = e.name
|
||||
@ -187,25 +200,6 @@ const handleAvatarSuccess_four = (
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
}
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
project_id: '',
|
||||
person_id: '',
|
||||
attendance_date: '',
|
||||
work_start_time: '',
|
||||
work_end_time: '',
|
||||
work_record_num: '',
|
||||
daily_salary: '',
|
||||
daily_living: '',
|
||||
daily_subsidy: '',
|
||||
daily_other: '',
|
||||
daily_income: '',
|
||||
remark: '',
|
||||
people: "",
|
||||
person_name: ""
|
||||
|
||||
})
|
||||
|
||||
|
||||
// 表单验证
|
||||
|
@ -66,8 +66,6 @@
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import { attendancedetailLists, attendancedetailDelete, attendancedetailDetail } from '@/api/project_attendance_detail'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
const protype = reactive([])
|
||||
import feedback from '@/utils/feedback'
|
||||
import EditPopup from './edit.vue'
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true">
|
||||
<el-input v-model="project_name" clearable placeholder="请输入项目名称" />
|
||||
<el-input v-model="project_name" clearable placeholder="请输入项目名称" :disabled="project" />
|
||||
</el-form-item> </el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="项目编码" prop="project_id">
|
||||
@ -135,17 +135,17 @@
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<projectDialog @customEvent="customEvent"></projectDialog>
|
||||
</el-dialog>
|
||||
<div v-if="showDialog1">
|
||||
<el-dialog v-model="showDialog1" title="选择项目人员" width="70%">
|
||||
<projectPersonnel @customEvent="customEvent1" :project_id="formData.project_id"></projectPersonnel>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</el-form>
|
||||
</popup>
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<projectDialog @customEvent="customEvent"></projectDialog>
|
||||
</el-dialog>
|
||||
<div v-if="showDialog1">
|
||||
<el-dialog v-model="showDialog1" title="选择项目人员" width="70%">
|
||||
<projectPersonnel @customEvent="customEvent1" :project_id="formData.project_id"></projectPersonnel>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</template>
|
||||
@ -160,12 +160,21 @@ import type { PropType } from 'vue'
|
||||
import configs from "@/config"
|
||||
import useUserStore from "@/stores/modules/user";
|
||||
import { watch } from "vue"
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
const { dictData } = useDictData('labor_contract_status,labor_contract_type,labor_contract_name')
|
||||
|
||||
let props = defineProps({
|
||||
project: Object
|
||||
})
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
project_id: '',
|
||||
attendance_date: '',
|
||||
remark: '',
|
||||
file: '',
|
||||
attendance_detail: [{}],
|
||||
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
})
|
||||
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
@ -200,6 +209,7 @@ const customEvent = (e) => {
|
||||
}
|
||||
|
||||
|
||||
if (props.project) customEvent(props.project);
|
||||
|
||||
|
||||
let rowIndex = 0
|
||||
@ -239,16 +249,6 @@ const handleAvatarSuccess_four = (
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
}
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
project_id: '',
|
||||
attendance_date: '',
|
||||
remark: '',
|
||||
file: '',
|
||||
attendance_detail: [{}],
|
||||
|
||||
})
|
||||
|
||||
|
||||
// 表单验证
|
||||
|
@ -40,9 +40,6 @@
|
||||
<el-table-column label="日补贴合计" prop="daily_subsidy_total" show-overflow-tooltip />
|
||||
<el-table-column label="日其它合计" prop="daily_other_total" show-overflow-tooltip />
|
||||
<el-table-column label="日收入合计" prop="daily_income_total" show-overflow-tooltip />
|
||||
|
||||
<el-table-column label="备注" prop="invoice_no" show-overflow-tooltip />
|
||||
|
||||
<el-table-column label="操作" width="160" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button v-perms="['project.project_attendance_record/edit']" type="primary" link
|
||||
@ -75,8 +72,6 @@
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import { attendanceRecordLists, attendanceRecordDelete, attendanceRecordDetail } from '@/api/project_attendance_record'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
const protype = reactive([])
|
||||
import feedback from '@/utils/feedback'
|
||||
import EditPopup from './edit.vue'
|
||||
|
@ -107,7 +107,6 @@
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import { apiProjectCostBudgetAdd, apiProjectCostBudgetEdit, apiProjectCostBudgetDetail } from '@/api/project_cost_budget'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import type { PropType } from 'vue'
|
||||
import { deptAll } from '@/api/org/department'
|
||||
import { getAll } from '@/api/org/organization'
|
||||
|
@ -2,9 +2,7 @@
|
||||
<div>
|
||||
<el-card class="!border-none mb-4" shadow="never">
|
||||
<el-form class="mb-[-16px]" :model="queryParams" inline>
|
||||
<el-form-item label="项目id" prop="project_id">
|
||||
<el-input class="w-[280px]" v-model="queryParams.project_id" clearable placeholder="请输入项目id" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="费用预算单号" prop="cost_budget_code">
|
||||
<el-input class="w-[280px]" v-model="queryParams.cost_budget_code" clearable placeholder="请输入费用预算单号" />
|
||||
</el-form-item>
|
||||
@ -56,7 +54,7 @@
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<div class="flex mt-4 justify-end">
|
||||
<div class="flex justify-end mt-4">
|
||||
<pagination v-model="pager" @change="getLists" />
|
||||
</div>
|
||||
</el-card>
|
||||
@ -68,7 +66,6 @@
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import { apiProjectCostBudgetLists, apiProjectCostBudgetDelete } from '@/api/project_cost_budget'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import feedback from '@/utils/feedback'
|
||||
import EditPopup from './edit.vue'
|
||||
|
||||
|
@ -22,7 +22,7 @@
|
||||
</el-form-item></el-col><el-col :span="12">
|
||||
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true"
|
||||
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
|
||||
<el-input v-model="project_name" readonly clearable placeholder="请输入项目名称" />
|
||||
<el-input v-model="project_name" readonly clearable placeholder="请输入项目名称" :disabled="project" />
|
||||
</el-form-item></el-col><el-col :span="12">
|
||||
<el-form-item label="项目编码" prop="project_id">
|
||||
<el-input v-model="project_code" disabled clearable placeholder="系统自动填写" />
|
||||
@ -68,9 +68,9 @@
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item></el-col><el-col :span="12">
|
||||
<el-form-item label="技术人员id" prop="technician">
|
||||
<el-form-item label="技术人员" prop="technician">
|
||||
|
||||
<el-select class="flex-1" v-model="formData.technician" clearable placeholder="请输入技术人员">
|
||||
<el-select class="flex-1" v-model="formData.technician" clearable placeholder="点击选择技术人员">
|
||||
<el-option v-for="(item, index) in jlist" :key="index" :label="item.name"
|
||||
:value="parseInt(item.id)" />
|
||||
</el-select>
|
||||
@ -105,22 +105,20 @@
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<projectTable @customEvent="customEvent"></projectTable>
|
||||
</el-dialog>
|
||||
<div v-if="showDialog1">
|
||||
<el-dialog v-model="showDialog1" title="选择需求" width="70%">
|
||||
<customerdemand @customEvent="customEvent1" :productid="formData.project_id"></customerdemand>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<div v-if="showDialog2">
|
||||
<el-dialog v-model="showDialog2" title="选择联系人" width="70%">
|
||||
<contactsTable @customEvent="customEvent2" :custom_id="customid"></contactsTable>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</popup>
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<projectTable @customEvent="customEvent"></projectTable>
|
||||
</el-dialog>
|
||||
<div v-if="showDialog1">
|
||||
<el-dialog v-model="showDialog1" title="选择需求" width="70%">
|
||||
<customerdemand @customEvent="customEvent1" :productid="formData.project_id"></customerdemand>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<div v-if="showDialog2">
|
||||
<el-dialog v-model="showDialog2" title="选择联系人" width="70%">
|
||||
<contactsTable @customEvent="customEvent2" :custom_id="customid"></contactsTable>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -131,17 +129,15 @@ import { deptAll } from '@/api/org/department'
|
||||
import { getAll } from '@/api/org/organization'
|
||||
import projectTable from "@/components/project/index.vue"
|
||||
import contactsTable from "@/components/contacts/index.vue"
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import { getAdminsByDept } from '@/api/common'
|
||||
import { apiProjectEstimateAdd, apiProjectEstimateEdit, apiProjectEstimateDetail } from '@/api/project_estimate'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import type { PropType } from 'vue'
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
let props = defineProps({
|
||||
project: Object
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const { dictData } = useDictData('estimate_source,invoice_type')
|
||||
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const mode = ref('add')
|
||||
@ -183,12 +179,30 @@ const handleAvatarSuccess_four = (
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
}
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
org_id: '',
|
||||
dept_id: '',
|
||||
project_id: '',
|
||||
customer_demand_id: '',
|
||||
estimate_source: '',
|
||||
create_user: '',
|
||||
quotation_date: '',
|
||||
invoice_type: '',
|
||||
technician: '',
|
||||
estimate_amount: '',
|
||||
ask: '',
|
||||
annex: [],
|
||||
contact_id: ''
|
||||
})
|
||||
|
||||
// dialog
|
||||
const showDialog = ref(false)
|
||||
const showDialog1 = ref(false)
|
||||
const showDialog2 = ref(false)
|
||||
|
||||
|
||||
const customEvent = (e: any) => {
|
||||
formData.project_id = e.id;
|
||||
customid.value = e.custom_id
|
||||
@ -199,6 +213,15 @@ const customEvent = (e: any) => {
|
||||
.value = e.custom_name;
|
||||
showDialog.value = false;
|
||||
};
|
||||
|
||||
if (props.project) customEvent(props.project);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
const customEvent1 = (e: any) => {
|
||||
// console.log(e.theme)
|
||||
formData.customer_demand_id = e.id;
|
||||
@ -262,23 +285,7 @@ const popupTitle = computed(() => {
|
||||
return mode.value == 'edit' ? '编辑项目概算' : '新增项目概算'
|
||||
})
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
org_id: '',
|
||||
dept_id: '',
|
||||
project_id: '',
|
||||
customer_demand_id: '',
|
||||
estimate_source: '',
|
||||
create_user: '',
|
||||
quotation_date: '',
|
||||
invoice_type: '',
|
||||
technician: '',
|
||||
estimate_amount: '',
|
||||
ask: '',
|
||||
annex: [],
|
||||
contact_id: ''
|
||||
})
|
||||
|
||||
|
||||
|
||||
// 表单验证
|
||||
|
@ -6,11 +6,12 @@
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目编码" prop="project_id"
|
||||
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
|
||||
<el-input v-model="project_code" clearable placeholder="请输入项目编码" @click="showDialog = true" />
|
||||
<el-input v-model="project_code" clearable placeholder="请输入项目编码" @click="showDialog = true"
|
||||
:disabled="project" />
|
||||
</el-form-item> </el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目名称" prop="project_id">
|
||||
<el-input v-model="project_name" clearable placeholder="请输入项目名称" />
|
||||
<el-input v-model="project_name" clearable placeholder="请输入项目名称" disabled />
|
||||
</el-form-item> </el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
@ -21,7 +22,7 @@
|
||||
<el-col :span="8">
|
||||
<el-form-item label="身份证号" prop="project_person_id"
|
||||
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-input v-model="idcard" clearable placeholder="系统自动填写" />
|
||||
<el-input v-model="idcard" clearable placeholder="系统自动填写" disabled />
|
||||
</el-form-item> </el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
@ -96,16 +97,15 @@
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</popup>
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<projectDialog @customEvent="customEvent"></projectDialog>
|
||||
</el-dialog>
|
||||
<div v-if="showDialog1">
|
||||
<el-dialog v-model="showDialog1" title="选择项目人员" width="70%">
|
||||
<customDialog @customEvent="customEvent1" :project_id="formData.project_id"></customDialog>
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<projectDialog @customEvent="customEvent"></projectDialog>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
<div v-if="showDialog1">
|
||||
<el-dialog v-model="showDialog1" title="选择项目人员" width="70%">
|
||||
<customDialog @customEvent="customEvent1" :project_id="formData.project_id"></customDialog>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</popup>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -115,19 +115,16 @@ import Popup from '@/components/popup/index.vue'
|
||||
import projectDialog from '@/components/project/index.vue'
|
||||
import { insurancemanagementAdd, insurancemanagementEdit, insurancemanagementDetail } from '@/api/project_insurance_management'
|
||||
import customDialog from '@/components/project_personnel/index.vue'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import type { PropType } from 'vue'
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
let props = defineProps({
|
||||
project: Object
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const mode = ref('add')
|
||||
|
||||
const { dictData } = useDictData('labor_contract_status,labor_contract_type,labor_contract_name')
|
||||
const showDialog = ref(false)
|
||||
const showDialog1 = ref(false)
|
||||
const project_name = ref('')
|
||||
@ -140,8 +137,26 @@ import useUserStore from "@/stores/modules/user";
|
||||
const base_url = configs.baseUrl + configs.urlPrefix
|
||||
const userStore = useUserStore();
|
||||
const formDataannex = reactive([])
|
||||
import feedback from '@/utils/feedback'
|
||||
const userInfo = userStore.userInfo
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
project_id: '',
|
||||
project_person_id: '',
|
||||
insurance_date: '',
|
||||
due_date: '',
|
||||
type: '',
|
||||
insurance_no: '',
|
||||
insurance: '',
|
||||
insured_amount: '',
|
||||
insurance_company: '',
|
||||
insurance_detail: '',
|
||||
invoice_no: '',
|
||||
handler: '',
|
||||
annex: [],
|
||||
})
|
||||
|
||||
|
||||
//获取值
|
||||
const customEvent = (e) => {
|
||||
formData.project_id = e.id
|
||||
@ -151,6 +166,9 @@ const customEvent = (e) => {
|
||||
showDialog.value = false
|
||||
|
||||
}
|
||||
|
||||
if (props.project) customEvent(props.project);
|
||||
|
||||
const customEvent1 = (e) => {
|
||||
formData.project_person_id = e.id
|
||||
idcard.value = e.idcard
|
||||
@ -181,23 +199,6 @@ const handleAvatarSuccess_four = (
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
}
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
project_id: '',
|
||||
project_person_id: '',
|
||||
insurance_date: '',
|
||||
due_date: '',
|
||||
type: '',
|
||||
insurance_no: '',
|
||||
insurance: '',
|
||||
insured_amount: '',
|
||||
insurance_company: '',
|
||||
insurance_detail: '',
|
||||
invoice_no: '',
|
||||
handler: '',
|
||||
annex: [],
|
||||
})
|
||||
|
||||
|
||||
// 表单验证
|
||||
|
@ -31,7 +31,8 @@
|
||||
</template>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button v-perms="['project.project_insurance_management/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
<el-button v-perms="['project.project_insurance_management/delete']" :disabled="!selectData.length"
|
||||
@click="handleDelete(selectData)">
|
||||
删除
|
||||
</el-button>
|
||||
|
||||
@ -43,16 +44,11 @@
|
||||
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
|
||||
<el-table-column label="姓名" prop="person_name" show-overflow-tooltip />
|
||||
<el-table-column label="身份证号" prop="person_idcard" show-overflow-tooltip />
|
||||
|
||||
<el-table-column label="投保日期" prop="insurance_date" show-overflow-tooltip />
|
||||
|
||||
<el-table-column label="到期日期" prop="due_date" show-overflow-tooltip />
|
||||
|
||||
<el-table-column label="保险种类" prop="type" show-overflow-tooltip />
|
||||
|
||||
<el-table-column label="保单号" prop="insurance_no" show-overflow-tooltip />
|
||||
<el-table-column label="保费(元)" prop="insurance" show-overflow-tooltip />
|
||||
|
||||
<el-table-column label="投保金额(万元)" prop="insured_amount" show-overflow-tooltip />
|
||||
<el-table-column label="保险公司" prop="insurance_company" show-overflow-tooltip />
|
||||
<el-table-column label="保单明细" prop="insurance_detail" show-overflow-tooltip />
|
||||
@ -73,13 +69,16 @@
|
||||
<!-- <el-table-column label="人员标识" prop="per_daily_living" show-overflow-tooltip /> -->
|
||||
<el-table-column label="操作" width="160" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button v-perms="['project.project_insurance_management/edit']" type="primary" link @click="handleEdit(row)">
|
||||
<el-button v-perms="['project.project_insurance_management/edit']" type="primary" link
|
||||
@click="handleEdit(row)">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button v-perms="['project.project_insurance_management/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
<el-button v-perms="['project.project_insurance_management/delete']" type="danger" link
|
||||
@click="handleDelete(row.id)">
|
||||
删除
|
||||
</el-button>
|
||||
<el-button v-perms="['project.project_insurance_management/detail']" link @click="handledetail(row)">
|
||||
<el-button v-perms="['project.project_insurance_management/detail']" link
|
||||
@click="handledetail(row)">
|
||||
详情
|
||||
</el-button>
|
||||
|
||||
|
@ -45,8 +45,7 @@ import { apiProjectLaborBudgetDetailAdd, apiProjectLaborBudgetDetailEdit, apiPro
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import type { PropType } from 'vue'
|
||||
import projectDialog from "@/components/project_labor_budget/index.vue"
|
||||
import { projectjobtypeLists } from "@/api/project_job_type.ts ";
|
||||
|
||||
import { projectjobtypeLists } from "@/api/project_job_type.ts";
|
||||
|
||||
defineProps({
|
||||
dictData: {
|
||||
|
@ -6,11 +6,12 @@
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true"
|
||||
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-input class="w-[220px]" v-model="project_name" clearable placeholder="请输入项目名称" />
|
||||
<el-input class="w-[220px]" v-model="project_name" clearable placeholder="请输入项目名称"
|
||||
:disabled="project" />
|
||||
</el-form-item> </el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目编码" prop="project_id">
|
||||
<el-input class="w-[220px]" v-model="project_code" clearable placeholder="请输入项目编码" />
|
||||
<el-input class="w-[220px]" v-model="project_code" clearable placeholder="请输入项目编码" disabled />
|
||||
</el-form-item> </el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="姓名" prop="project_person_id" @click="showDialog1 = true"
|
||||
@ -116,15 +117,16 @@
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</popup>
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<projectDialog @customEvent="customEvent" :is_budget="1"></projectDialog>
|
||||
</el-dialog>
|
||||
<div v-if="showDialog1">
|
||||
<el-dialog v-model="showDialog1" title="选择项目人员" width="70%">
|
||||
<customDialog @customEvent="customEvent1" :project_id="formData.project_id"></customDialog>
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<projectDialog @customEvent="customEvent" :is_budget="1"></projectDialog>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<div v-if="showDialog1">
|
||||
<el-dialog v-model="showDialog1" title="选择项目人员" width="70%">
|
||||
<customDialog @customEvent="customEvent1" :project_id="formData.project_id"></customDialog>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</popup>
|
||||
|
||||
|
||||
</div>
|
||||
</template>
|
||||
@ -137,11 +139,9 @@ import { projectlaborcontractAdd, projectlaborcontractEdit, projectlaborcontract
|
||||
import customDialog from '@/components/project_personnel/index.vue'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import type { PropType } from 'vue'
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
|
||||
let props = defineProps({
|
||||
project: Object
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
@ -160,7 +160,26 @@ import useUserStore from "@/stores/modules/user";
|
||||
const base_url = configs.baseUrl + configs.urlPrefix
|
||||
const userStore = useUserStore();
|
||||
const formDataannex = reactive([])
|
||||
import feedback from '@/utils/feedback'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
const { dictData } = useDictData('labor_contract_status,labor_contract_type,labor_contract_name')
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
project_id: '',
|
||||
project_person_id: '',
|
||||
contract_status: '',
|
||||
contract_type: '',
|
||||
contract_title: '',
|
||||
signing_date: '',
|
||||
trial_start_date: '',
|
||||
trial_end_date: '',
|
||||
start_date: '',
|
||||
end_date: '',
|
||||
release_time: '',
|
||||
release_reason: '',
|
||||
remark: '',
|
||||
annex: [],
|
||||
})
|
||||
|
||||
//获取值
|
||||
const customEvent = (e) => {
|
||||
@ -171,6 +190,9 @@ const customEvent = (e) => {
|
||||
showDialog.value = false
|
||||
|
||||
}
|
||||
|
||||
if (props.project) customEvent(props.project)
|
||||
|
||||
const customEvent1 = (e) => {
|
||||
formData.project_person_id = e.id
|
||||
idcard.value = e.idcard
|
||||
@ -201,24 +223,7 @@ const handleAvatarSuccess_four = (
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
}
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
project_id: '',
|
||||
project_person_id: '',
|
||||
contract_status: '',
|
||||
contract_type: '',
|
||||
contract_title: '',
|
||||
signing_date: '',
|
||||
trial_start_date: '',
|
||||
trial_end_date: '',
|
||||
start_date: '',
|
||||
end_date: '',
|
||||
release_time: '',
|
||||
release_reason: '',
|
||||
remark: '',
|
||||
annex: [],
|
||||
})
|
||||
|
||||
|
||||
|
||||
// 表单验证
|
||||
|
@ -42,10 +42,14 @@ const baseData1 = reactive({
|
||||
tit: "客户需求",
|
||||
queryParams: { project_id: props.project.id },
|
||||
columnList: [
|
||||
{ label: '需求主题', prop: 'project_name' },
|
||||
{ label: '重要程度', prop: 'custom_name' },
|
||||
{ label: '记录时间', prop: 'executor' },
|
||||
{ label: '需求内容', prop: 'theme' },
|
||||
{ label: '项目名称', prop: 'project_name' },
|
||||
{ label: '客户名称', prop: 'custom_name' },
|
||||
{ label: '需求主题', prop: 'theme' },
|
||||
{ label: '需求提供人', prop: 'supplier' },
|
||||
{ label: '提供人联系方式', prop: 'supplier_contacts' },
|
||||
{ label: '重要程度', prop: 'importance_text' },
|
||||
{ label: '记录时间', prop: 'recording_time' },
|
||||
{ label: '需求内容', prop: 'demand_content' },
|
||||
]
|
||||
})
|
||||
const baseData2 = reactive({
|
||||
@ -53,24 +57,32 @@ const baseData2 = reactive({
|
||||
tit: "解决方案",
|
||||
queryParams: { project_id: props.project.id },
|
||||
columnList: [
|
||||
{ label: '解决方案主题', prop: 'project_name' },
|
||||
{ label: '提交时间', prop: 'custom_name' },
|
||||
{ label: '方案内容', prop: 'executor' },
|
||||
{ label: '客户反馈', prop: 'theme' },
|
||||
{ label: '项目名称', prop: 'project_name' },
|
||||
{ label: '客户名称', prop: 'custom_name' },
|
||||
{ label: '需求名称', prop: 'customer_demand_name' },
|
||||
{ label: '解决方案主题', prop: 'theme' },
|
||||
{ label: '提交时间', prop: 'submission_time' },
|
||||
{ label: '方案内容', prop: 'solution_content' },
|
||||
{ label: '客户反馈', prop: 'customer_feedback' },
|
||||
]
|
||||
})
|
||||
|
||||
|
||||
|
||||
const baseData3 = reactive({
|
||||
fetchFun: apiProjectEstimateLists,
|
||||
tit: "项目概算",
|
||||
queryParams: { project_id: props.project.id },
|
||||
columnList: [
|
||||
{ label: '项目名称', prop: 'project_name' },
|
||||
{ label: '客户名称', prop: 'custom_name' },
|
||||
{ label: '需求', prop: 'customer_demand_name' },
|
||||
{ label: '概算来源', prop: 'estimate_source_text' },
|
||||
{ label: '制单人', prop: 'create_user' },
|
||||
{ label: '报价日期', prop: 'quotation_date' },
|
||||
{ label: '发票类型', prop: 'invoice_type_text' },
|
||||
{ label: '技术人员', prop: 'technician_name' },
|
||||
{ label: '概算金额(万元)', prop: 'estimate_amount' },
|
||||
{ label: '要求', prop: 'ask' },
|
||||
{ label: '概算金额', prop: 'estimate_amount' },
|
||||
]
|
||||
})
|
||||
|
||||
@ -79,17 +91,16 @@ const baseData4 = reactive({
|
||||
tit: "竞争对手",
|
||||
queryParams: { project_id: props.project.id },
|
||||
columnList: [
|
||||
{ label: '项目名称', prop: 'project_name' },
|
||||
{ label: '客户名称', prop: 'custom_name' },
|
||||
{ label: '客户需求', prop: 'customer_demand_name' },
|
||||
{ label: '竞争对手名称', prop: 'competitor_name' },
|
||||
{ label: '竞争对手联系人', prop: 'competitor_contacts' },
|
||||
{ label: '联系人电话', prop: 'competitor_contacts_phone' },
|
||||
{ label: '竞争能力', prop: 'competitive_power' },
|
||||
{ label: '竞争对手优势', prop: 'competitor_advantages' },
|
||||
{ label: '竞争对手劣势', prop: 'competitor_disadvantages' },
|
||||
{ label: '备注', prop: 'remark' },
|
||||
]
|
||||
})
|
||||
|
||||
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.tit {
|
||||
|
@ -1,8 +1,8 @@
|
||||
<template>
|
||||
<myTable :baseData="baseData"></myTable>
|
||||
<myTable :baseData="baseData1"></myTable>
|
||||
<myTable :baseData="baseData2"></myTable>
|
||||
<myTable :baseData="baseData3"></myTable>
|
||||
<myTable :baseData="baseData" :project="project" editPath="InvoicingRequests"></myTable>
|
||||
<myTable :baseData="baseData1" :project="project" editPath="remittance"></myTable>
|
||||
<myTable :baseData="baseData2" :project="project" editPath="recordsPayment"></myTable>
|
||||
<myTable :baseData="baseData3" :project="project" editPath="refund"></myTable>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
@ -13,35 +13,30 @@ import { apiinvoiceapplyLists } from '@/api/InvoicingRequests'
|
||||
import { apireturnedLists } from '@/api/remittance'
|
||||
import { apireturnedrecordLists } from '@/api/recordsPayment'
|
||||
import { apirefundapplyLists } from '@/api/refund'
|
||||
import EditPopup from '@/views/project_follow_up/edit.vue'
|
||||
|
||||
const props = defineProps({
|
||||
project_id: Number,
|
||||
components: EditPopup
|
||||
project: Object,
|
||||
})
|
||||
|
||||
const baseData = reactive({
|
||||
fetchFun: apiinvoiceapplyLists,
|
||||
tit: "开票记录",
|
||||
queryParams: { project_id: props.project_id },
|
||||
queryParams: { project_id: props.project.id },
|
||||
columnList: [
|
||||
{ label: '开票单号', prop: 'invoicing_code' },
|
||||
{ label: '合同编号', prop: 'contract_code' },
|
||||
{ label: '合同名称', prop: 'contract_name' },
|
||||
{ label: '客户', prop: 'custom_name' },
|
||||
{ label: '项目编码', prop: 'project_code' },
|
||||
{ label: '项目名称', prop: 'project_name' },
|
||||
{ label: '开票日期', prop: 'invoicing_date' },
|
||||
{ label: '期次', prop: 'period' },
|
||||
{ label: '发票类型', prop: 'invoice_type' },
|
||||
{ label: '发票编号', prop: 'tax' },
|
||||
{ label: '开票金额(含税)', prop: 'amount_including_tax' },
|
||||
{ label: '开票金额(含税)', prop: 'invoicing_amount' },
|
||||
{ label: '税率', prop: 'tax_rate' },
|
||||
{ label: '税额', prop: 'tax_amount' },
|
||||
]
|
||||
})
|
||||
|
||||
const baseData1 = reactive({
|
||||
fetchFun: apireturnedLists,
|
||||
tit: "回款计划",
|
||||
queryParams: { project_id: props.project_id },
|
||||
queryParams: { project_id: props.project.id },
|
||||
columnList: [
|
||||
{ label: '合同编号', prop: 'contract_code' },
|
||||
{ label: '合同名称', prop: 'contract_name' },
|
||||
@ -59,7 +54,7 @@ const baseData1 = reactive({
|
||||
const baseData2 = reactive({
|
||||
fetchFun: apireturnedrecordLists,
|
||||
tit: "回款记录",
|
||||
queryParams: { project_id: props.project_id },
|
||||
queryParams: { project_id: props.project.id },
|
||||
columnList: [
|
||||
{ label: '合同名称', prop: 'contract_name' },
|
||||
{ label: '合同编号', prop: 'contract_code' },
|
||||
@ -73,7 +68,7 @@ const baseData2 = reactive({
|
||||
const baseData3 = reactive({
|
||||
fetchFun: apirefundapplyLists,
|
||||
tit: "退款记录",
|
||||
queryParams: { project_id: props.project_id },
|
||||
queryParams: { project_id: props.project.id },
|
||||
columnList: [
|
||||
{ label: '退款单号', prop: 'refund_code' },
|
||||
{ label: '合同编号', prop: 'contract_code' },
|
||||
|
@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<myTable :baseData="baseData"></myTable>
|
||||
<myTable :baseData="baseData1"></myTable>
|
||||
<myTable :baseData="baseData" :project="project" editPath="contract"></myTable>
|
||||
<myTable :baseData="baseData1" :project="project" editPath="contract_negotiation"></myTable>
|
||||
</template>
|
||||
<script setup>
|
||||
|
||||
@ -9,15 +9,14 @@ import { apiContractLists } from '@/api/contract'
|
||||
import { apiContractNegotiationLists } from '@/api/contract_negotiation'
|
||||
import myTable from "./myTable.vue"
|
||||
|
||||
|
||||
const props = defineProps({
|
||||
project_id: Number
|
||||
project: Object
|
||||
})
|
||||
|
||||
const baseData = reactive({
|
||||
fetchFun: apiContractLists,
|
||||
tit: "主合同",
|
||||
queryParams: { project_id: props.project_id },
|
||||
queryParams: { project_id: props.project.id },
|
||||
columnList: [
|
||||
{ label: '合同编号', prop: 'contract_name' },
|
||||
{ label: '合同名称', prop: 'contract_code' },
|
||||
@ -37,7 +36,7 @@ const baseData = reactive({
|
||||
const baseData1 = reactive({
|
||||
fetchFun: apiContractNegotiationLists,
|
||||
tit: "合同洽商",
|
||||
queryParams: { project_id: props.project_id },
|
||||
queryParams: { project_id: props.project.id },
|
||||
columnList: [
|
||||
{ label: '洽商编号', prop: 'negotiation_no' },
|
||||
{ label: '洽商单名称', prop: 'negotiation_name' },
|
||||
|
@ -2,22 +2,28 @@
|
||||
<el-tabs v-model="active" class="demo-tabs">
|
||||
|
||||
<el-tab-pane label="项目人员" name="first-1">
|
||||
<myTable :baseData="baseData" v-if="active == 'first-1'"></myTable>
|
||||
<myTable :baseData="baseData" v-if="active == 'first-1'" :project="project" editPath="project_personnel">
|
||||
</myTable>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="劳动合同" name="first-2">
|
||||
<myTable :baseData="baseData5" v-if="active == 'first-2'"></myTable>
|
||||
<myTable :baseData="baseData5" v-if="active == 'first-2'" :project="project" editPath="project_labor_contract">
|
||||
</myTable>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="保险记录" name="first-3">
|
||||
<myTable :baseData="baseData1" v-if="active == 'first-3'"></myTable>
|
||||
<myTable :baseData="baseData1" v-if="active == 'first-3'" :project="project"
|
||||
editPath="project_insurance_management"></myTable>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="项目考勤" name="first-4">
|
||||
<myTable :baseData="baseData2" v-if="active == 'first-4'"></myTable>
|
||||
<myTable :baseData="baseData2" v-if="active == 'first-4'" :project="project"
|
||||
editPath="project_attendance_record"></myTable>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="考勤明细" name="first-5">
|
||||
<myTable :baseData="baseData3" v-if="active == 'first-5'"></myTable>
|
||||
<myTable :baseData="baseData3" v-if="active == 'first-5'" :project="project"
|
||||
editPath="project_attendance_detail"></myTable>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="工资付款" name="first-6">
|
||||
<myTable :baseData="baseData4" v-if="active == 'first-6'"></myTable>
|
||||
<myTable :baseData="baseData4" v-if="active == 'first-6'" :project="project" editPath="project_salary_payment">
|
||||
</myTable>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</template>
|
||||
@ -35,13 +41,13 @@ import { projectsalaryDetailLists } from '@/api/project_salary_detail'
|
||||
|
||||
const active = ref('first-1')
|
||||
const props = defineProps({
|
||||
project_id: Number
|
||||
project: Object
|
||||
})
|
||||
|
||||
const baseData = reactive({
|
||||
fetchFun: projectpersonnelLists,
|
||||
tit: "",
|
||||
queryParams: { project_id: props.project_id },
|
||||
queryParams: { project_id: props.project.id },
|
||||
columnList: [
|
||||
{ label: '姓名', prop: 'name' },
|
||||
{ label: '身份证号', prop: 'idcard' },
|
||||
@ -61,16 +67,22 @@ const baseData = reactive({
|
||||
const baseData1 = reactive({
|
||||
fetchFun: insurancemanagementLists,
|
||||
tit: "",
|
||||
queryParams: { project_id: props.project_id },
|
||||
queryParams: { project_id: props.project.id },
|
||||
columnList: [
|
||||
{ label: '姓名', prop: 'project_name' },
|
||||
{ label: '项目编码', prop: 'project_code' },
|
||||
{ label: '项目名称', prop: 'project_name' },
|
||||
{ label: '姓名', prop: 'person_name' },
|
||||
{ label: '身份证号', prop: 'person_idcard' },
|
||||
{ label: '投保日期', prop: 'insurance_date' },
|
||||
{ label: '到期日期', prop: 'due_date' },
|
||||
{ label: '保险种类', prop: 'type_text' },
|
||||
{ label: '保险种类', prop: 'type' },
|
||||
{ label: '保单号', prop: 'insurance_no' },
|
||||
{ label: '保费(元)', prop: 'insurance' },
|
||||
{ label: '投保金额(万元)', prop: 'insured_amount' },
|
||||
{ label: '保险公司', prop: 'insurance_company' },
|
||||
{ label: '保单明细', prop: 'insurance_detail' },
|
||||
{ label: '发票编号', prop: 'invoice_no' },
|
||||
{ label: '经办人', prop: 'handler' },
|
||||
|
||||
]
|
||||
})
|
||||
@ -78,7 +90,7 @@ const baseData1 = reactive({
|
||||
const baseData2 = reactive({
|
||||
fetchFun: attendanceRecordLists,
|
||||
tit: "",
|
||||
queryParams: { project_id: props.project_id },
|
||||
queryParams: { project_id: props.project.id },
|
||||
columnList: [
|
||||
{ label: '日记工单号', prop: 'attendance_code' },
|
||||
{ label: '日期', prop: 'attendance_date' },
|
||||
@ -97,7 +109,7 @@ const baseData2 = reactive({
|
||||
const baseData3 = reactive({
|
||||
fetchFun: attendancedetailLists,
|
||||
tit: "",
|
||||
queryParams: { project_id: props.project_id },
|
||||
queryParams: { project_id: props.project.id },
|
||||
columnList: [
|
||||
{ label: '日记工单号', prop: 'attendance_code' },
|
||||
{ label: '日期', prop: 'attendance_date' },
|
||||
@ -120,7 +132,7 @@ const baseData3 = reactive({
|
||||
const baseData4 = reactive({
|
||||
fetchFun: projectsalaryDetailLists,
|
||||
tit: "",
|
||||
queryParams: { project_id: props.project_id },
|
||||
queryParams: { project_id: props.project.id },
|
||||
columnList: [
|
||||
{ label: '工资付款单号', prop: 'payment_code' },
|
||||
{ label: '日期', prop: 'apply_date' },
|
||||
@ -139,7 +151,7 @@ const baseData4 = reactive({
|
||||
const baseData5 = reactive({
|
||||
fetchFun: projectlaborcontractLists,
|
||||
tit: "",
|
||||
queryParams: { project_id: props.project_id },
|
||||
queryParams: { project_id: props.project.id },
|
||||
columnList: [
|
||||
{ label: '项目名称', prop: 'project_name' },
|
||||
{ label: '身份证号', prop: 'person_idcard' },
|
||||
|
@ -10,7 +10,7 @@
|
||||
</span>
|
||||
<template #dropdown>
|
||||
<el-dropdown-menu>
|
||||
<el-dropdown-item @click="handleAdd"> 添加</el-dropdown-item>
|
||||
<el-dropdown-item @click="handleAdd">添加</el-dropdown-item>
|
||||
<el-dropdown-item> 编辑</el-dropdown-item>
|
||||
<el-dropdown-item> 删除</el-dropdown-item>
|
||||
<el-dropdown-item> 导出</el-dropdown-item>
|
||||
@ -51,9 +51,7 @@ const handleAdd = async () => {
|
||||
showEdit.value = true
|
||||
setTimeout(() => {
|
||||
editRef.value?.open('add')
|
||||
console.log("执行了点击")
|
||||
}, 100);
|
||||
|
||||
}, 700);
|
||||
}
|
||||
|
||||
// 分页相关
|
||||
|
@ -1,8 +1,8 @@
|
||||
<template>
|
||||
<myTable :baseData="baseData"></myTable>
|
||||
<myTable :baseData="baseData1"></myTable>
|
||||
<myTable :baseData="baseData2"></myTable>
|
||||
<myTable :baseData="baseData3"></myTable>
|
||||
<myTable :baseData="baseData" :project="project" editPath="finance_receipt_record"></myTable>
|
||||
<myTable :baseData="baseData1" :project="project" editPath="finance_payment_plan"></myTable>
|
||||
<myTable :baseData="baseData2" :project="project" editPath="procurement_contract"></myTable>
|
||||
<myTable :baseData="baseData3" :project="project" editPath="procurement_contract"></myTable>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
@ -15,13 +15,13 @@ import { paymentapplyLists } from '@/api/paymentrequest'
|
||||
import { apiFinancerefundLists } from '@/api/refundrecord'
|
||||
|
||||
const props = defineProps({
|
||||
project_id: Number
|
||||
project: Object
|
||||
})
|
||||
|
||||
const baseData = reactive({
|
||||
fetchFun: apifinancereceiptLists,
|
||||
tit: "收票记录",
|
||||
queryParams: { project_id: props.project_id },
|
||||
queryParams: { project_id: props.project.id },
|
||||
columnList: [
|
||||
{ label: '开票日期', prop: 'invoicing_date' },
|
||||
{ label: '提交人', prop: 'commitor' },
|
||||
@ -37,23 +37,25 @@ const baseData = reactive({
|
||||
const baseData1 = reactive({
|
||||
fetchFun: paymentplanLists,
|
||||
tit: "付款计划",
|
||||
queryParams: { project_id: props.project_id },
|
||||
queryParams: { project_id: props.project.id },
|
||||
columnList: [
|
||||
{ label: '供应商名称', prop: 'supplier_name' },
|
||||
{ label: '项目名称', prop: 'project_name' },
|
||||
{ label: '合同编号', prop: 'contract_no' },
|
||||
{ label: '计划付款日期', prop: 'pay_date' },
|
||||
{ label: '期次', prop: 'period' },
|
||||
{ label: '状态', prop: 'status' },
|
||||
{ label: '金额', prop: 'amount' },
|
||||
{ label: '期次', prop: 'pay_period_text' },
|
||||
{ label: '状态', prop: 'pay_status_text' },
|
||||
{ label: '已付款', prop: 'has_payment_amount' },
|
||||
{ label: '未付款', prop: 'not_payment_amoun' },
|
||||
{ label: '备注', prop: 'amount_excluding_tax' },
|
||||
{ label: '税额', prop: 'remark' },
|
||||
]
|
||||
{ label: '未付款', prop: 'not_payment_amount' },
|
||||
{ label: '备注', prop: 'remark' },
|
||||
],
|
||||
})
|
||||
|
||||
const baseData2 = reactive({
|
||||
fetchFun: paymentapplyLists,
|
||||
tit: "付款记录",
|
||||
queryParams: { project_id: props.project_id },
|
||||
queryParams: { project_id: props.project.id },
|
||||
columnList: [
|
||||
{ label: '付款单号', prop: 'competitor_name' },
|
||||
{ label: '合同编号', prop: 'contract_no' },
|
||||
@ -71,7 +73,7 @@ const baseData2 = reactive({
|
||||
const baseData3 = reactive({
|
||||
fetchFun: apiFinancerefundLists,
|
||||
tit: "退款记录",
|
||||
queryParams: { project_id: props.project_id },
|
||||
queryParams: { project_id: props.project.id },
|
||||
columnList: [
|
||||
{ label: '合同编号', prop: 'contract_no' },
|
||||
{ label: '合同名称', prop: 'contract_name' },
|
||||
|
@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<myTable :baseData="baseData"></myTable>
|
||||
<myTable :baseData="baseData" :project="project" editPath="procurement_contract"></myTable>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
@ -9,14 +9,14 @@ import myTable from "./myTable.vue"
|
||||
import { apiProcurementContractLists } from '@/api/procurement_contract'
|
||||
|
||||
const props = defineProps({
|
||||
project_id: Number
|
||||
project: Object
|
||||
})
|
||||
|
||||
|
||||
const baseData = reactive({
|
||||
fetchFun: apiProcurementContractLists,
|
||||
tit: "采购合同",
|
||||
queryParams: { project_id: props.project_id },
|
||||
queryParams: { project_id: props.project.id },
|
||||
|
||||
columnList: [
|
||||
{ label: '合同编号', prop: 'contract_no' },
|
||||
|
@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<myTable :baseData="baseData"></myTable>
|
||||
<myTable :baseData="baseData1"></myTable>
|
||||
<myTable :baseData="baseData" :project="project" editPath="subcontracting_contract"></myTable>
|
||||
<myTable :baseData="baseData1" :project="project" editPath="subcontracting_contract_negotiation"></myTable>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
@ -11,13 +11,13 @@ import { apiSubcontractingContractLists } from '@/api/subcontracting_contract'
|
||||
import { apinegotiationLists } from '@/api/subcontractor'
|
||||
|
||||
const props = defineProps({
|
||||
project_id: Number
|
||||
project: Object
|
||||
})
|
||||
|
||||
const baseData1 = reactive({
|
||||
fetchFun: apinegotiationLists,
|
||||
tit: "分包洽商",
|
||||
queryParams: { project_id: props.project_id },
|
||||
queryParams: { project_id: props.project.id },
|
||||
|
||||
columnList: [
|
||||
{ label: '洽商编号', prop: 'negotiation_no' },
|
||||
@ -36,7 +36,7 @@ const baseData1 = reactive({
|
||||
const baseData = reactive({
|
||||
fetchFun: apiSubcontractingContractLists,
|
||||
tit: "分包合同",
|
||||
queryParams: { project_id: props.project_id },
|
||||
queryParams: { project_id: props.project.id },
|
||||
|
||||
columnList: [
|
||||
{ label: '项目名称', prop: 'project_name' },
|
||||
|
@ -1,9 +1,9 @@
|
||||
<template>
|
||||
<myTable :baseData="baseData"></myTable>
|
||||
<myTable :baseData="baseData1"></myTable>
|
||||
<myTable :baseData="baseData2"></myTable>
|
||||
<myTable :baseData="baseData3"></myTable>
|
||||
<myTable :baseData="baseData4"></myTable>
|
||||
<myTable :baseData="baseData" :project="project" editPath="bid_bidding_decision"></myTable>
|
||||
<myTable :baseData="baseData1" :project="project" editPath="bid_document_examination"></myTable>
|
||||
<myTable :baseData="baseData2" :project="project" editPath="bid_result"></myTable>
|
||||
<myTable :baseData="baseData3" :project="project" editPath="bidbbond"></myTable>
|
||||
<myTable :baseData="baseData4" :project="project" editPath="refundbidDeposit"></myTable>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
@ -18,7 +18,7 @@ import { bidrefundLists } from '@/api/refundbidDeposit'
|
||||
import myTable from "./myTable.vue"
|
||||
|
||||
const props = defineProps({
|
||||
project_id: Number
|
||||
project: Object
|
||||
})
|
||||
|
||||
|
||||
@ -26,7 +26,7 @@ const props = defineProps({
|
||||
const baseData = reactive({
|
||||
fetchFun: apiBidBiddingDecisionLists,
|
||||
tit: "投标决策",
|
||||
queryParams: { project_id: props.project_id },
|
||||
queryParams: { project_id: props.project.id },
|
||||
columnList: [
|
||||
{ label: '流程编号', prop: 'code' },
|
||||
{ label: '项目估算(万元)', prop: 'project_estimation' },
|
||||
@ -43,7 +43,7 @@ const baseData = reactive({
|
||||
const baseData1 = reactive({
|
||||
fetchFun: apiBidDocumentExaminationLists,
|
||||
tit: "标书审查",
|
||||
queryParams: { project_id: props.project_id },
|
||||
queryParams: { project_id: props.project.id },
|
||||
columnList: [
|
||||
{ label: '流程编号', prop: 'code' },
|
||||
{ label: '标书编号', prop: 'bid_document_no' },
|
||||
@ -57,7 +57,7 @@ const baseData1 = reactive({
|
||||
const baseData2 = reactive({
|
||||
fetchFun: apiBidResultLists,
|
||||
tit: "投标结果",
|
||||
queryParams: { project_id: props.project_id },
|
||||
queryParams: { project_id: props.project.id },
|
||||
columnList: [
|
||||
{ label: '投标编号', prop: 'bid_document_examination_code' },
|
||||
{ label: '投标时间', prop: 'bidding_time' },
|
||||
@ -71,32 +71,35 @@ const baseData2 = reactive({
|
||||
const baseData3 = reactive({
|
||||
fetchFun: bidapplyLists,
|
||||
tit: "投标保证金",
|
||||
queryParams: { project_id: props.project_id },
|
||||
queryParams: { project_id: props.project.id },
|
||||
columnList: [
|
||||
{ label: '流程编号', prop: 'bidding_decision_code' },
|
||||
{ label: '投标编号', prop: 'security_apply_code' },
|
||||
{ label: '客户名称', prop: 'custom_name' },
|
||||
{ label: '项目名称', prop: 'project_name' },
|
||||
{ label: '投标时间', prop: 'bidding_time' },
|
||||
{ label: '预计退还时间', prop: 'refund_date' },
|
||||
{ label: '申请人', prop: 'applier' },
|
||||
{ label: '保证金金额', prop: 'margin_amount' },
|
||||
{ label: '已退金额', prop: 'refund_amount' },
|
||||
{ label: '已退金额', prop: 'has_refund_amount' },
|
||||
{ label: '未退金额', prop: 'not_refund_amount' },
|
||||
{ label: '创建日期', prop: 'create_time' },
|
||||
]
|
||||
})
|
||||
|
||||
const baseData4 = reactive({
|
||||
fetchFun: bidrefundLists,
|
||||
tit: "退投标保证金",
|
||||
queryParams: { project_id: props.project_id },
|
||||
queryParams: { project_id: props.project.id },
|
||||
columnList: [
|
||||
{ label: '投标时间', prop: 'bidding_time' },
|
||||
{ label: '退款日期', prop: 'refund_date' },
|
||||
{ label: '账户编码', prop: 'bank_account_info' },
|
||||
{ label: '开户银行', prop: 'bank_account_info' },
|
||||
{ label: '退款金额', prop: 'refund_amount' },
|
||||
{ label: '投标编号', prop: 'bidding_decision_code' },
|
||||
{ label: '客户名称', prop: 'custom_name' },
|
||||
{ label: '创建日期', prop: 'create_time' },
|
||||
|
||||
{ label: '项目编码', prop: 'project_code' },
|
||||
{ label: '项目名称', prop: 'project_name' },
|
||||
{ label: '投标时间', prop: 'refund_date' },
|
||||
{ label: '退款金额', prop: 'refund_amount' },
|
||||
{ label: '退款日期', prop: 'refund_date' },
|
||||
{ label: '备注', prop: 'remark' },
|
||||
]
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
@ -12,11 +12,11 @@
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="投标" name="demo-3">
|
||||
<tender v-if="activeName == 'demo-3'" :project_id="project_id"></tender>
|
||||
<tender v-if="activeName == 'demo-3'" :project="formData"></tender>
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="合同" name="demo-4">
|
||||
<contract v-if="activeName == 'demo-4'" :project_id="project_id"></contract>
|
||||
<contract v-if="activeName == 'demo-4'" :project="formData"></contract>
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="预算" name="demo-5">
|
||||
@ -24,23 +24,23 @@
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="采购" name="demo-8">
|
||||
<procurement v-if="activeName == 'demo-8'" :project_id="project_id"></procurement>
|
||||
<procurement v-if="activeName == 'demo-8'" :project="formData"></procurement>
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="分包" name="demo-9">
|
||||
<subcontract v-if="activeName == 'demo-9'" :project_id="project_id"></subcontract>
|
||||
<subcontract v-if="activeName == 'demo-9'" :project="formData"></subcontract>
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="人力" name="demo-12">
|
||||
<manpower v-if="activeName == 'demo-12'" :project_id="project_id"></manpower>
|
||||
<manpower v-if="activeName == 'demo-12'" :project="formData"></manpower>
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="收款" name="demo-14">
|
||||
<Collection v-if="activeName == 'demo-14'" :project_id="project_id"></Collection>
|
||||
<Collection v-if="activeName == 'demo-14'" :project="formData"></Collection>
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="付款" name="demo-15">
|
||||
<payment v-if="activeName == 'demo-15'" :project_id="project_id"></payment>
|
||||
<payment v-if="activeName == 'demo-15'" :project="formData"></payment>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="文档" name="demo-16">
|
||||
<documentation v-if="activeName == 'demo-16'" :project_id="project_id"></documentation>
|
||||
|
@ -179,28 +179,6 @@ const { pager, getLists, resetParams, resetPage } = usePaging({
|
||||
params: queryParams
|
||||
})
|
||||
|
||||
// 添加
|
||||
const handleAdd = async () => {
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('add')
|
||||
}
|
||||
|
||||
// 编辑
|
||||
const handleEdit = async (data: any) => {
|
||||
let res = await apiProjectDetail({ id: data.id })
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('edit')
|
||||
editRef.value?.setFormData(res)
|
||||
}
|
||||
|
||||
// 删除
|
||||
const handleDelete = async (id: number | any[]) => {
|
||||
await feedback.confirm('确定要删除?')
|
||||
await apiProjectDelete({ id })
|
||||
getLists()
|
||||
}
|
||||
const handledetail = async (data: any) => {
|
||||
let res = await apiProjectDetail({ id: data.id })
|
||||
showDtail.value = true
|
||||
|
@ -4,17 +4,22 @@
|
||||
<popup ref="popupRef" title="材料预算详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
|
||||
<el-descriptions :column="2" border>
|
||||
|
||||
<el-descriptions-item label="项目名称" label-align="left" align="left" label-class-name="my-label"> {{ formData.project_name }}</el-descriptions-item>
|
||||
<el-descriptions-item label="项目编码" label-align="left" align="left" label-class-name="my-label"> {{ formData.project_code }}</el-descriptions-item>
|
||||
<el-descriptions-item label="材料预算单号" label-align="left" align="left" label-class-name="my-label"> {{ formData.material_budget_code }}</el-descriptions-item>
|
||||
<el-descriptions-item label="备注" label-align="left" align="left" label-class-name="my-label"> {{ formData.remark
|
||||
<el-descriptions-item label="项目名称" label-align="left" align="left" label-class-name="my-label"> {{
|
||||
formData.project_name }}</el-descriptions-item>
|
||||
<el-descriptions-item label="项目编码" label-align="left" align="left" label-class-name="my-label"> {{
|
||||
formData.project_code }}</el-descriptions-item>
|
||||
<el-descriptions-item label="材料预算单号" label-align="left" align="left" label-class-name="my-label"> {{
|
||||
formData.material_budget_code }}</el-descriptions-item>
|
||||
<el-descriptions-item label="备注" label-align="left" align="left" label-class-name="my-label"> {{
|
||||
formData.remark
|
||||
}}</el-descriptions-item>
|
||||
|
||||
|
||||
<el-descriptions-item label="附件" label-align="left" align="left" label-class-name="my-label">
|
||||
<div v-if="formData.annex.length > 0">
|
||||
<div v-for="(item, index) in formData.annex" style="margin-left: 5px;display: block;">
|
||||
<el-link style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item" target="_blank">文件{{ index + 1 }}查看</el-link>
|
||||
<el-link style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item"
|
||||
target="_blank">文件{{ index + 1 }}查看</el-link>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -42,7 +47,9 @@
|
||||
</el-table>
|
||||
</div>
|
||||
<div style="margin: 10px 0;">
|
||||
<el-pagination v-model:current-page="pager1.page_no" v-model:page-size="pager1.page_size" :page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handleSizeChange1" @current-change="handleCurrentChange1" />
|
||||
<el-pagination v-model:current-page="pager1.page_no" v-model:page-size="pager1.page_size"
|
||||
:page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper" :total="total"
|
||||
@size-change="handleSizeChange1" @current-change="handleCurrentChange1" />
|
||||
</div>
|
||||
</popup>
|
||||
</div>
|
||||
@ -172,5 +179,4 @@ defineExpose({
|
||||
|
||||
:deep(.my-label) {
|
||||
width: 150px;
|
||||
}
|
||||
</style>
|
||||
}</style>
|
||||
|
@ -9,13 +9,13 @@
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目名称" prop="project_id" @click="showDialog2 = true"
|
||||
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-input v-model="project_name" clearable readonly placeholder="请输入项目名称" />
|
||||
<el-input v-model="project_name" clearable readonly placeholder="请输入项目名称" :disabled="project" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目编码" prop="project_id"
|
||||
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-input v-model="project_code" clearable readonly placeholder="请输入项目编码" />
|
||||
<el-input v-model="project_code" clearable placeholder="请输入项目编码" disabled />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
@ -51,13 +51,14 @@
|
||||
<el-col :span="8">
|
||||
<el-form-item label="人工单价" prop="unit_price"
|
||||
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-input v-model="formData.unit_price" clearable placeholder="请输入人工单价" />
|
||||
<el-input v-model="formData.unit_price" clearable placeholder="请输入人工单价" type="number" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="每日生活费" prop="daily_living_expenses"
|
||||
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-input v-model="formData.daily_living_expenses" clearable placeholder="请输入每日生活费" />
|
||||
<el-input v-model="formData.daily_living_expenses" clearable placeholder="请输入每日生活费"
|
||||
type="number" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
@ -116,25 +117,16 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="projectEdit">
|
||||
import customDialog from '@/components/custom-dialog/index.vue'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import documentDialog from '@/components/project_document/index.vue'
|
||||
import projectDialog from '@/components/project/index.vue'
|
||||
import { projectpersonnelAdd, projectpersonnelEdit, projectpersonnelDetail } from '@/api/project_personnel'
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { isEmail, isIdCard, isPhone } from '@/utils/validate'
|
||||
import { deptAll } from '@/api/org/department'
|
||||
import { getAll } from '@/api/org/organization'
|
||||
import type { PropType } from 'vue'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import { projectjobtypeAll } from "@/api/project_job_type.ts"
|
||||
const { dictData } = useDictData('work_type')
|
||||
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
let props = defineProps({
|
||||
project: Object
|
||||
})
|
||||
const project_name = ref('')
|
||||
const project_code = ref('')
|
||||
@ -142,15 +134,8 @@ const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const mode = ref('add')
|
||||
const showDialog = ref(false)
|
||||
const showDialog2 = ref(false)
|
||||
|
||||
const customEvent2 = (e: any) => {
|
||||
formData.project_id = e.id;
|
||||
project_name.value = e.name;
|
||||
project_code.value = e.project_code;
|
||||
showDialog2.value = false;
|
||||
};
|
||||
|
||||
|
||||
const allJobType = reactive([])
|
||||
@ -217,6 +202,14 @@ const formData = reactive({
|
||||
|
||||
})
|
||||
|
||||
const customEvent2 = (e: any) => {
|
||||
formData.project_id = e.id;
|
||||
project_name.value = e.name;
|
||||
project_code.value = e.project_code;
|
||||
showDialog2.value = false;
|
||||
};
|
||||
|
||||
if (props.project) customEvent2(props.project)
|
||||
|
||||
// 表单验证
|
||||
const formRules = reactive<any>({
|
||||
|
@ -10,7 +10,8 @@
|
||||
</el-form-item>
|
||||
<el-form-item label="工种" prop="work_type">
|
||||
<el-select v-model="queryParams.work_type" clearable placeholder="请选择工种">
|
||||
<el-option v-for="(item, index) in dictData.work_type" :key="index" :label="item.name" :value="parseInt(item.value)" />
|
||||
<el-option v-for="(item, index) in dictData.work_type" :key="index" :label="item.name"
|
||||
:value="parseInt(item.value)" />
|
||||
</el-select></el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="resetPage">查询</el-button>
|
||||
@ -25,7 +26,8 @@
|
||||
</template>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button v-perms="['project.project_document/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
<el-button v-perms="['project.project_document/delete']" :disabled="!selectData.length"
|
||||
@click="handleDelete(selectData)">
|
||||
删除
|
||||
</el-button>
|
||||
|
||||
@ -49,10 +51,12 @@
|
||||
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
|
||||
<el-table-column label="操作" width="150" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button v-perms="['project.project_document/edit']" type="primary" link @click="handleEdit(row)">
|
||||
<el-button v-perms="['project.project_document/edit']" type="primary" link
|
||||
@click="handleEdit(row)">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button v-perms="['project.project_document/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
<el-button v-perms="['project.project_document/delete']" type="danger" link
|
||||
@click="handleDelete(row.id)">
|
||||
删除
|
||||
</el-button>
|
||||
<el-button v-perms="['project.project_document/detail']" link @click="handledetail(row)">
|
||||
@ -76,8 +80,6 @@
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import { projectpersonnelLists, projectpersonnelDelete, projectpersonnelDetail } from '@/api/project_personnel'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
const protype = reactive([])
|
||||
import feedback from '@/utils/feedback'
|
||||
import EditPopup from './edit.vue'
|
||||
|
@ -6,11 +6,12 @@
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目编码" prop="project_id"
|
||||
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-input v-model="project_code" clearable placeholder="请选择项目编码" @click="showDialog = true" />
|
||||
<el-input v-model="project_code" clearable placeholder="请选择项目编码" @click="showDialog = true"
|
||||
:disabled="project" />
|
||||
</el-form-item> </el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目名称">
|
||||
<el-input v-model="project_name" clearable disabled placeholder="系统自动填写" />
|
||||
<el-input v-model="project_name" clearable placeholder="系统自动填写" disabled />
|
||||
</el-form-item> </el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="付款类型" prop="payment_type">
|
||||
@ -97,15 +98,16 @@
|
||||
</el-table>
|
||||
</div>
|
||||
</el-form>
|
||||
</popup>
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<projectDialog @customEvent="customEvent"></projectDialog>
|
||||
</el-dialog>
|
||||
<div v-if="showDialog1">
|
||||
<el-dialog v-model="showDialog1" title="选择项目人员" width="70%">
|
||||
<customDialog @customEvent="customEvent1" :project_id="formData.project_id"></customDialog>
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<projectDialog @customEvent="customEvent"></projectDialog>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<div v-if="showDialog1">
|
||||
<el-dialog v-model="showDialog1" title="选择项目人员" width="70%">
|
||||
<customDialog @customEvent="customEvent1" :project_id="formData.project_id"></customDialog>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</popup>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -130,13 +132,12 @@ const handleAvatarSuccess_four = (response: any) => {
|
||||
|
||||
// 删除上传的文件
|
||||
const delFileFn = (index: number) => { formData.annex.splice(index, 1) }
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
|
||||
const { dictData } = useDictData('salary_payment_type')
|
||||
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
let props = defineProps({
|
||||
project: Object
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
@ -151,7 +152,19 @@ const idcard = ref('')
|
||||
const num = ref(0)
|
||||
const formDataannex = reactive([])
|
||||
const paymentlist = reactive([{}])
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
project_id: '',
|
||||
payment_type: '',
|
||||
apply_date: '',
|
||||
total_amount: '',
|
||||
total_amount_uppercase: '',
|
||||
payment_detail: [],
|
||||
remark: '',
|
||||
annex: [],
|
||||
|
||||
})
|
||||
//获取值
|
||||
const customEvent = (e) => {
|
||||
formData.project_id = e.id
|
||||
@ -163,6 +176,10 @@ const customEvent = (e) => {
|
||||
showDialog.value = false
|
||||
|
||||
}
|
||||
|
||||
if (props.project) customEvent(props.project);
|
||||
|
||||
|
||||
const customEvent1 = (e) => {
|
||||
paymentlist[num.value].person_id = e.id
|
||||
paymentlist[num.value].person_name = e.name
|
||||
@ -201,19 +218,7 @@ const popupTitle = computed(() => {
|
||||
return mode.value == 'edit' ? '编辑工资付款' : '新增工资付款'
|
||||
})
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
project_id: '',
|
||||
payment_type: '',
|
||||
apply_date: '',
|
||||
total_amount: '',
|
||||
total_amount_uppercase: '',
|
||||
payment_detail: [],
|
||||
remark: '',
|
||||
annex: [],
|
||||
|
||||
})
|
||||
//金额计算
|
||||
watch(
|
||||
paymentlist,
|
||||
|
@ -92,8 +92,6 @@
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import { projectsalarypaymentLists, projectsalarypaymentDelete, projectsalarypaymentDetail } from '@/api/project_salary_payment'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
const protype = reactive([])
|
||||
import feedback from '@/utils/feedback'
|
||||
import EditPopup from './edit.vue'
|
||||
|
@ -46,24 +46,29 @@
|
||||
{{ formData.settlement_amount }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="结算金额大写">
|
||||
{{ formData.settlement_amount_uppercase
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="合同金额">
|
||||
{{ formData.contract_amount
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="洽商金额">
|
||||
{{ formData.negotiation_amount
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="结算差异">
|
||||
{{ formData.settlement_difference }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="合同附件">
|
||||
<div v-if="formDataannex.length > 0">
|
||||
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start"
|
||||
:href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -34,8 +34,9 @@
|
||||
<el-table-column label="合同编号" prop="contract_code" show-overflow-tooltip />
|
||||
<el-table-column label="结算日期" prop="settlement_date" show-overflow-tooltip />
|
||||
<el-table-column label="合同金额" prop="contract_amount" show-overflow-tooltip />
|
||||
<el-table-column label="洽商金额" prop="negotiation_amount" show-overflow-tooltip />
|
||||
<el-table-column label="结算金额" prop="settlement_amount" show-overflow-tooltip />
|
||||
<el-table-column label="结算差异" prop="remaining_amount" show-overflow-tooltip />
|
||||
<el-table-column label="结算差异" prop="settlement_difference" show-overflow-tooltip />
|
||||
<el-table-column label="添加人" prop="add_user_name" show-overflow-tooltip />
|
||||
<!-- <el-table-column label="负责人" prop="add_user_name" show-overflow-tooltip /> -->
|
||||
<el-table-column label="操作" width="160" fixed="right">
|
||||
|
@ -45,8 +45,8 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="结算金额大写">
|
||||
{{ formData.settlement_amount_uppercase
|
||||
<el-form-item label="结算差异">
|
||||
{{ formData.settlement_difference
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@ -56,12 +56,18 @@
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="洽商金额">
|
||||
{{ formData.negotiation_amount
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="合同附件">
|
||||
<div v-if="formDataannex.length > 0">
|
||||
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start"
|
||||
:href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -34,8 +34,9 @@
|
||||
<el-table-column label="合同编号" prop="contract_code" show-overflow-tooltip />
|
||||
<el-table-column label="结算日期" prop="settlement_date" show-overflow-tooltip />
|
||||
<el-table-column label="合同金额" prop="contract_amount" show-overflow-tooltip />
|
||||
<el-table-column label="洽商金额" prop="negotiation_amount" show-overflow-tooltip />
|
||||
<el-table-column label="结算金额" prop="settlement_amount" show-overflow-tooltip />
|
||||
<el-table-column label="结算差异" prop="remaining_amount" show-overflow-tooltip />
|
||||
<el-table-column label="结算差异" prop="settlement_difference" show-overflow-tooltip />
|
||||
<el-table-column label="添加人" prop="add_user_name" show-overflow-tooltip />
|
||||
<el-table-column label="操作" width="160" fixed="right">
|
||||
<template #default="{ row }">
|
||||
|
@ -5,8 +5,6 @@
|
||||
|
||||
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
|
||||
<el-row :gutter="10">
|
||||
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="合同编号" prop="contract_id" @click="showDialog1 = true"
|
||||
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
@ -156,18 +154,11 @@
|
||||
<el-form-item label="账号" prop="account">
|
||||
<el-input v-model="account" clearable disabled placeholder="请输入开票公司名称" />
|
||||
</el-form-item>
|
||||
|
||||
</el-col>
|
||||
|
||||
|
||||
</el-row>
|
||||
|
||||
|
||||
<!-- <el-dialog v-model="showDialog" title="选择客户" width="70%">
|
||||
<customDialog @customEvent="customEvent"></customDialog>
|
||||
</el-dialog> -->
|
||||
<el-dialog v-model="showDialog1" title="选择合同" width="70%">
|
||||
<contractDialog @customEvent="customEvent1"></contractDialog>
|
||||
<contractDialog @customEvent="customEvent1" :project_id="project?.id || ''"></contractDialog>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog v-model="showDialog2" title="选择银行账户" width="70%">
|
||||
@ -200,6 +191,8 @@ import { isEmail, isIdCard, isPhone } from '@/utils/validate'
|
||||
import type { PropType } from 'vue'
|
||||
import configs from "@/config"
|
||||
import useUserStore from "@/stores/modules/user";
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
const { dictData } = useDictData('isaccrued,pay_type,invoice_status,pay_period,collection_type')
|
||||
const protype = reactive([])
|
||||
const base_url = configs.baseUrl + configs.urlPrefix
|
||||
const userStore = useUserStore();
|
||||
@ -236,11 +229,8 @@ const handleAvatarSuccess_four = (
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
}
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
let props = defineProps({
|
||||
project: Object
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
|
@ -5,11 +5,15 @@
|
||||
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
|
||||
<el-row :gutter="10">
|
||||
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目名称" prop="contract_id" @click="showDialog1 = true"
|
||||
<el-form-item label="合同名称" prop="contract_name">
|
||||
<el-input v-model="contract_name" clearable placeholder="点击选择合同" @click="showDialog1 = true" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目名称" prop="contract_id"
|
||||
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
|
||||
<el-input v-model="project_name" clearable placeholder="请选择项目" />
|
||||
<el-input v-model="project_name" clearable placeholder="系统自动填写" disabled />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
@ -23,11 +27,7 @@
|
||||
<el-input v-model="contract_no" clearable disabled placeholder="系统自动填写" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="合同名称" prop="contract_name">
|
||||
<el-input v-model="contract_name" clearable disabled placeholder="系统自动填写" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="客户名称" prop="customer_id">
|
||||
<el-input v-model="custom_name" clearable disabled placeholder="系统自动填写" />
|
||||
@ -154,7 +154,7 @@
|
||||
<bankaccountDialog @customEvent="customEvent"></bankaccountDialog>
|
||||
</el-dialog>
|
||||
<el-dialog v-model="showDialog1" title="选择合同" width="70%">
|
||||
<contractDialog @customEvent="customEvent1"></contractDialog>
|
||||
<contractDialog @customEvent="customEvent1" :project_id="project?.id || ''"></contractDialog>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
@ -179,6 +179,9 @@ import { isEmail, isIdCard, isPhone } from '@/utils/validate'
|
||||
import type { PropType } from 'vue'
|
||||
import configs from "@/config"
|
||||
import useUserStore from "@/stores/modules/user";
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
const { dictData } = useDictData('refund_type')
|
||||
|
||||
const protype = reactive([])
|
||||
const base_url = configs.baseUrl + configs.urlPrefix
|
||||
const userStore = useUserStore();
|
||||
@ -192,7 +195,6 @@ const contract_no = ref('')
|
||||
const custom_name = ref('')
|
||||
const bank_account_no = ref('')
|
||||
const userInfo = userStore.userInfo
|
||||
console.log(userInfo, '222222')
|
||||
// 上传文件
|
||||
const handleAvatarSuccess_four = (
|
||||
response,
|
||||
@ -211,11 +213,8 @@ const handleAvatarSuccess_four = (
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
}
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
let props = defineProps({
|
||||
project: Object
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
|
@ -5,11 +5,6 @@
|
||||
|
||||
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
|
||||
<el-row :gutter="10">
|
||||
<!-- <el-col :span="8">
|
||||
<el-form-item label="客户名称" prop="custom_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-input v-model="custom_name" @click="showDialog = true" clearable placeholder="请选择客户" />
|
||||
</el-form-item>
|
||||
</el-col> -->
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="合同编号" prop="contract_id" @click="showDialog1 = true">
|
||||
@ -104,13 +99,9 @@
|
||||
|
||||
|
||||
</el-row>
|
||||
<!-- <el-dialog v-model="showDialog" title="选择客户" width="70%">
|
||||
<customDialog @customEvent="customEvent"></customDialog>
|
||||
</el-dialog> -->
|
||||
|
||||
<el-dialog v-model="showDialog1" title="选择合同" width="70%">
|
||||
<contractDialog @customEvent="customEvent1"></contractDialog>
|
||||
<!-- <salescontractDialog @customEvent="customEvent1" :contract_type="2"></salescontractDialog> -->
|
||||
</el-dialog>
|
||||
|
||||
<personnelselector ref="personnel" @confirm="submituser" type="1"></personnelselector>
|
||||
@ -135,6 +126,7 @@ import { isEmail, isIdCard, isPhone } from '@/utils/validate'
|
||||
import type { PropType } from 'vue'
|
||||
import configs from "@/config"
|
||||
import useUserStore from "@/stores/modules/user";
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
const protype = reactive([])
|
||||
const base_url = configs.baseUrl + configs.urlPrefix
|
||||
const userStore = useUserStore();
|
||||
@ -167,12 +159,14 @@ const handleAvatarSuccess_four = (
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
}
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
})
|
||||
// defineProps({
|
||||
// dictData: {
|
||||
// type: Object as PropType<Record<string, any[]>>,
|
||||
// default: () => ({})
|
||||
// }
|
||||
// })
|
||||
const { dictData } = useDictData('return_status,pay_period,contract_type')
|
||||
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
|
@ -28,7 +28,7 @@
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true"
|
||||
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
|
||||
<el-input v-model="project_name" readonly clearable placeholder="请选择项目" />
|
||||
<el-input v-model="project_name" readonly clearable placeholder="请选择项目" :disabled="project" />
|
||||
</el-form-item> </el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目编码" prop="project_id"
|
||||
@ -224,22 +224,22 @@
|
||||
</el-table>
|
||||
</div>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
</el-form>
|
||||
</popup>
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<projectTable @customEvent="customEvent"></projectTable>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog v-model="showDialog1" title="选择供应商" width="70%">
|
||||
<suppliertable @customEvent="customEvent1"></suppliertable>
|
||||
</el-dialog>
|
||||
<div v-if="showDialog2">
|
||||
<el-dialog v-model="showDialog2" title="选择分包明细" width="70%">
|
||||
<subpackageTable @customEvent="customEvent2" :project_id="formData.project_id"></subpackageTable>
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<projectTable @customEvent="customEvent"></projectTable>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
<el-dialog v-model="showDialog1" title="选择供应商" width="70%">
|
||||
<suppliertable @customEvent="customEvent1" :project_id="project?.id || ''"></suppliertable>
|
||||
</el-dialog>
|
||||
<div v-if="showDialog2">
|
||||
<el-dialog v-model="showDialog2" title="选择分包明细" width="70%">
|
||||
<subpackageTable @customEvent="customEvent2" :project_id="formData.project_id"></subpackageTable>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
</popup>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
@ -250,28 +250,18 @@ import Popup from '@/components/popup/index.vue'
|
||||
import projectTable from '@/components/project/index.vue'
|
||||
import suppliertable from '@/components/supplier/index.vue'
|
||||
import subpackageTable from '@/components/subpackage_budget_detail/index.vue'
|
||||
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
const list1 = reactive([])
|
||||
const list2 = reactive([])
|
||||
import { deptAll } from '@/api/org/department'
|
||||
import { getAll } from '@/api/org/organization'
|
||||
import { paymentplanLists } from '@/api/paymentplan'
|
||||
|
||||
import { apiSubcontractingContractDetailLists } from '@/api/subcontracting_contract_detail'
|
||||
|
||||
import { apiSubcontractingContractAdd, apiSubcontractingContractEdit, apiSubcontractingContractDetail } from '@/api/subcontracting_contract'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import type { PropType } from 'vue'
|
||||
let props = defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
},
|
||||
|
||||
project: Object
|
||||
})
|
||||
|
||||
|
||||
|
||||
import { toChinesNum } from "@/utils/util";
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
@ -296,6 +286,11 @@ import configs from "@/config"
|
||||
const base_url = configs.baseUrl + configs.urlPrefix
|
||||
import useUserStore from "@/stores/modules/user";
|
||||
const userStore = useUserStore();
|
||||
|
||||
const { dictData } = useDictData('divide_contract_type,account_period,tax_rate,pay_type,pay_period ')
|
||||
|
||||
|
||||
|
||||
// 上传文件
|
||||
const handleAvatarSuccess_four = (
|
||||
response,
|
||||
@ -326,11 +321,7 @@ const handleDelete = (row: any) => {
|
||||
const index = paymentList.indexOf(row);
|
||||
paymentList.splice(index, 1);
|
||||
};
|
||||
const handleAdd1 = (row: any) => {
|
||||
// 在 row 后面插入一行数据
|
||||
const index = subcontractList.indexOf(row);
|
||||
subcontractList.splice(index + 1, 0, {});
|
||||
};
|
||||
|
||||
|
||||
const handleDelete1 = (row: any) => {
|
||||
// 删除 row
|
||||
@ -354,7 +345,7 @@ const procurementList = (id) => {
|
||||
'unit': item.unit,
|
||||
'num': item.num,
|
||||
'price': item.price,
|
||||
'tax_rate': props.dictData.tax_rate.find((items) => items.name == item.tax_rate)
|
||||
'tax_rate': dictData.tax_rate.find((items) => items.name == item.tax_rate)
|
||||
}))
|
||||
// console.log(data, props.dictData)
|
||||
subcontractList.splice(0, subcontractList.length, ...data);
|
||||
@ -429,6 +420,11 @@ const customEvent = (e: any) => {
|
||||
project_code.value = e.project_code
|
||||
showDialog.value = false;
|
||||
};
|
||||
|
||||
|
||||
if (props.project) customEvent(props.project);
|
||||
|
||||
|
||||
const customEvent1 = (e: any) => {
|
||||
|
||||
formData.supplier_id = e.id;
|
||||
@ -450,8 +446,8 @@ const customEvent2 = (e: any) => {
|
||||
|
||||
//获取税率Name
|
||||
const getTaxValue = (value) => {
|
||||
let i = props.dictData.tax_rate.findIndex((item) => item.value == value)
|
||||
return (1 - props.dictData.tax_rate[i]?.name / 100) || 0
|
||||
let i = dictData.tax_rate.findIndex((item) => item.value == value)
|
||||
return (1 - dictData.tax_rate[i]?.name / 100) || 0
|
||||
}
|
||||
|
||||
//金额计算
|
||||
|
@ -140,19 +140,15 @@
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn1(index)">x</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
|
||||
</el-form>
|
||||
<el-dialog v-model="showDialog" title="选择分包合同" width="70%">
|
||||
<procurementTable @customEvent="customEvent" :project_id="project?.id || ''"></procurementTable>
|
||||
</el-dialog>
|
||||
</popup>
|
||||
<el-dialog v-model="showDialog" title="选择分包合同" width="70%">
|
||||
<procurementTable @customEvent="customEvent"></procurementTable>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
</div>
|
||||
</template>
|
||||
@ -160,16 +156,14 @@
|
||||
<script lang="ts" setup name="procurementContractEdit">
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import procurementTable from '@/components/procurement/index.vue'
|
||||
import { apinegotiationAdd, apinegotiationEdit, apinegotiationDetail } from '@/api/subcontractor'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import type { PropType } from 'vue'
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
const { dictData } = useDictData('negotiation_type')
|
||||
let props = defineProps({
|
||||
project: Object
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
@ -288,6 +282,7 @@ const formData = reactive({
|
||||
const customEvent = (e: any) => {
|
||||
contract_no.value = e.contract_no;
|
||||
supplier_name.value = e.supplier_name;
|
||||
supplier_code.value = e.supplier_code;
|
||||
formData.signing_date = e.signing_date;
|
||||
project_name.value = e.project_name;
|
||||
formData.subcontracting_contract_id = e.id;
|
||||
|
@ -89,8 +89,6 @@
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import { apinegotiationLists, apinegotiationDelete, apinegotiationDetail } from '@/api/subcontractor'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
const protype = reactive([])
|
||||
import feedback from '@/utils/feedback'
|
||||
import EditPopup from './edit.vue'
|
||||
|
Loading…
x
Reference in New Issue
Block a user