This commit is contained in:
zmj 2024-03-27 16:06:10 +08:00
parent 8f58ca2988
commit c32ff7f777
36 changed files with 663 additions and 137 deletions

View File

@ -1,26 +1,34 @@
import request from '@/utils/request'
import request from "@/utils/request";
// 财务管理--项目预算书列表
export function apiFinancialBudgetDocLists(params: any) {
return request.get({ url: '/financial.financial_budget_doc/lists', params })
return request.get({ url: "/financial.financial_budget_doc/lists", params });
}
// 添加财务管理--项目预算书
export function apiFinancialBudgetDocAdd(params: any) {
return request.post({ url: '/financial.financial_budget_doc/add', params })
return request.post({ url: "/financial.financial_budget_doc/add", params });
}
// 编辑财务管理--项目预算书
export function apiFinancialBudgetDocEdit(params: any) {
return request.post({ url: '/financial.financial_budget_doc/edit', params })
return request.post({ url: "/financial.financial_budget_doc/edit", params });
}
// 删除财务管理--项目预算书
export function apiFinancialBudgetDocDelete(params: any) {
return request.post({ url: '/financial.financial_budget_doc/delete', params })
return request.post({
url: "/financial.financial_budget_doc/delete",
params,
});
}
// 财务管理--项目预算书详情
export function apiFinancialBudgetDocDetail(params: any) {
return request.get({ url: '/financial.financial_budget_doc/detail', params })
}
return request.get({ url: "/financial.financial_budget_doc/detail", params });
}
// 财务管理--项目预算书
export function apiFinancialBudgetDocSearch(params: any) {
return request.get({ url: "/financial.financial_budget_doc/datas", params });
}

View File

@ -0,0 +1,58 @@
import request from "@/utils/request";
// 财务管理--部门收入结算列表
export function apiFinancialDepartmentIncomeSettlementLists(params: any) {
return request.get({
url: "/financial.financial_department_income_settlement/lists",
params,
});
}
// 添加财务管理--部门收入结算
export function apiFinancialDepartmentIncomeSettlementAdd(params: any) {
return request.post({
url: "/financial.financial_department_income_settlement/add",
params,
});
}
// 编辑财务管理--部门收入结算
export function apiFinancialDepartmentIncomeSettlementEdit(params: any) {
return request.post({
url: "/financial.financial_department_income_settlement/edit",
params,
});
}
// 删除财务管理--部门收入结算
export function apiFinancialDepartmentIncomeSettlementDelete(params: any) {
return request.post({
url: "/financial.financial_department_income_settlement/delete",
params,
});
}
// 财务管理--部门收入结算详情
export function apiFinancialDepartmentIncomeSettlementDetail(params: any) {
return request.get({
url: "/financial.financial_department_income_settlement/detail",
params,
});
}
// 财务管理--部门收入结算列表
export function apiFinancialDepartmentIncomeSettlementDetailLists(params: any) {
return request.get({
url: "/financial.financial_department_income_settlement_detail/lists",
params,
});
}
// 删除财务管理--部门收入结算
export function apiFinancialDepartmentIncomeSettlementDetailDelete(
params: any
) {
return request.post({
url: "/financial.financial_department_income_settlement_detail/delete",
params,
});
}

View File

@ -1,5 +1,4 @@
<template>
<el-col :span="8" v-if="flag">
<el-form-item label="创建人" prop="create_user">
<el-input v-model="formData.create_user" clearable placeholder="请输入填表人" />
@ -13,11 +12,11 @@
</el-form-item>
</el-col>
<el-form-item label="创建人" prop="create_user" v-if="!flag">
<el-form-item :label="name + '人'" prop="create_user" v-if="!flag">
<el-input v-model="formData.create_user" clearable placeholder="请输入填表人" />
</el-form-item>
<el-form-item label="创建时间" prop="create_time" v-if="!flag">
<el-form-item :label="name + '日期'" prop="create_time" v-if="!flag">
<el-date-picker class="flex-1 !flex" v-model="formData.create_time" clearable type="datetime"
value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择创建时间">
</el-date-picker>
@ -33,7 +32,11 @@ import useUserStore from "@/stores/modules/user";
let props = defineProps({
flag: Boolean,
formData: Object
formData: Object,
name: {
default: "创建",
type: String
}
})
const userStore = useUserStore().userInfo;

View File

@ -584,3 +584,26 @@ export const financial_invoice: Iconfig = {
{ refund_amount: "到账金额" },
],
};
import { apiFinancialBudgetDocLists } from "@/api/financial_budget_doc";
export const financial_budget_doc: Iconfig = {
fetchFn: apiFinancialBudgetDocLists,
serchList: [
{
label: "预算书编号",
value: "code",
},
{
label: "预算书名称",
value: "name",
},
],
tableList: [
{ contract_name: "合同名称" },
{ total_amount: "合同金额" },
{ code: "预算书编号" },
{ name: "预算书名称" },
{ issue_date: "下达日期" },
],
};

View File

@ -10,6 +10,9 @@
<el-button @click="handleDelete(row)">-</el-button>
</template>
</el-table-column>
<slot></slot>
<el-table-column :label="item.label" v-for="(item, index) in config.tableConfig" :key="index"
:prop="item[value]">
<template #default="{ row }">

View File

@ -67,7 +67,7 @@ export default defineComponent({
clickModalClose: {
//
type: Boolean,
default: false
default: true
},
center: {
//

View File

@ -0,0 +1,20 @@
/**
* perm
*
* <el-button v-code"></el-button>
* code为编号输入框unit为单位输入框
*/
export default {
mounted: async (el: HTMLElement, binding: any) => {
var inputElements = el.getElementsByTagName("input")[0];
var { value } = binding;
inputElements.addEventListener("input", function (event) {
if (value == "code") {
event.target.value = event.target.value.replace(/[\u4e00-\u9fa5]/g, "");
} else if (value == "unit") {
event.target.value = event.target.value.replace(/\d+/g, "");
}
});
},
};

View File

@ -3,21 +3,44 @@
* @returns {Boolean}
*/
export function isExternal(path: string) {
return /^(https?:|mailto:|tel:)/.test(path)
return /^(https?:|mailto:|tel:)/.test(path);
}
//电话
export function isPhone(data: string) {
return /^1[3|4|5|7|8][0-9]{9}$/.test(data)
return /^1[3|4|5|7|8][0-9]{9}$/.test(data);
}
//身份号
export function isIdCard(data: string ){
return /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(data)
export function isIdCard(data: string) {
return /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(data);
}
//邮箱
export function isEmail(data: string) {
return /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/.test(data)
return /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/.test(data);
}
// input框校验
//电话
export function checkPhone(rules: any, value: any, callback: any) {
/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/.test(
value
)
? callback()
: callback(new Error("请输入正确的手机号"));
}
//邮箱
export function checkEmail(rules: any, value: any, callback: any) {
/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/.test(value)
? callback()
: callback(new Error("请输入正确的邮箱"));
}
//邮箱
export function checkIdcard(rules: any, value: any, callback: any) {
/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(value)
? callback()
: callback(new Error("请输入正确的身份证号码"));
}

View File

@ -10,8 +10,7 @@
</el-col>
<el-col :span="8">
<el-form-item label="合同编号" prop="contract_num">
<el-input v-model="formData.contract_num" clearable placeholder="请输入合同编号"
@input="formData.contract_num = formData.contract_num.replace(/[\u4e00-\u9fa5]/g, '')" />
<el-input v-model="formData.contract_num" clearable placeholder="请输入合同编号" v-type="'code'" />
</el-form-item>
</el-col>
<el-col :span="8">
@ -272,8 +271,7 @@
</el-col>
<el-col :span="8">
<el-form-item label="邮寄编号" prop="number">
<el-input v-model="formData.number" clearable placeholder="请输入邮寄编号"
@input="formData.number = formData.number.replace(/[\u4e00-\u9fa5]/g, '')" />
<el-input v-model="formData.number" clearable placeholder="请输入邮寄编号" v-type="'code'" />
</el-form-item>
</el-col>

View File

@ -0,0 +1,56 @@
import {
apiFinancialDepartmentIncomeSettlementDetailLists,
} from '@/api/financial_department_income_settlement'
const detailConfig = {
title: "财务管理--部门收入结算",
config: [
{
label: "项目预算书",
value: "name"
},
{
label: "结算说明",
value: "desc"
},
{
label: "结算人",
value: "create_user"
},
{
label: "结算日期",
value: "create_time"
},
],
table: {
title: "结算明细",
tableConfig: [
{
label: "部门",
value: 'dept_name',
},
{
label: "预算分成方式",
value: 'type_text'
},
{
label: "预算分成金额",
value: 'settlement_amount',
},
{
label: "结算单号",
value: 'settlement_code',
},
{
label: "备注",
value: 'remark',
},
],
fetchFun: apiFinancialDepartmentIncomeSettlementDetailLists,
query: "department_income_settlement_id"
}
}
export default detailConfig;

View File

@ -0,0 +1,204 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="60vw" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="100px" :rules="formRules">
<el-row>
<el-col :span="8">
<el-form-item label="项目预算书" prop="budget_doc_name">
<el-input v-model="formData.name" clearable placeholder="点击选择项目预算书" @click="showDialog = true"
readonly />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="结算说明">
<el-input v-model="formData.desc" clearable placeholder="请输入结算说明" />
</el-form-item>
</el-col>
<createUserLable flag :formData="formData" name="结算"></createUserLable>
</el-row>
<formTable :formData="formData.detail" :config="tableConfig" :dictData="dictData">
<el-table-column label="部门">
<template #default="{ row }">
<el-select v-model="row.dept_id" placeholder="请选择部门">
<el-option :label="item.name" :value="item.id" v-for="item in deptList">
</el-option>
</el-select>
</template>
</el-table-column>
</formTable>
<el-dialog v-model="showDialog" title="项目预算书" width="70%">
<dialogTable :config="financial_budget_doc" @customEvent="customEvent">
</dialogTable>
</el-dialog>
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="financialDepartmentIncomeSettlementEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import {
apiFinancialDepartmentIncomeSettlementAdd, apiFinancialDepartmentIncomeSettlementEdit, apiFinancialDepartmentIncomeSettlementDetail,
apiFinancialDepartmentIncomeSettlementDetailLists, apiFinancialDepartmentIncomeSettlementDetailDelete
} from '@/api/financial_department_income_settlement'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
import { deptLists } from "@/api/org/department"
import { financial_budget_doc } from "@/components/dialogTable/dialogTableConfig";
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>>()
const mode = ref('add')
const showDialog = ref(false)
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑财务管理--部门收入结算' : '新增财务管理--部门收入结算'
})
//
const formData = reactive({
id: '',
budget_doc_id: '',
name: "",
desc: '',
create_user: '',
create_time: '',
"detail": []
})
const customEvent = (e) => {
formData.budget_doc_id = e.id
formData.name = e.name
showDialog.value = false
}
const tableConfig = reactive(
{
title: "结算明细",
tableConfig: [
{
label: "预算分成方式",
value: 'type',
select: 'budget_share_method'
},
{
label: "预算分成金额",
value: 'amount',
},
{
label: "结算金额",
value: 'settlement_amount',
},
{
label: "结算单号",
value: 'settlement_code',
},
{
label: "备注",
value: 'remark',
},
],
deleteApi: apiFinancialDepartmentIncomeSettlementDetailDelete,
}
)
//
const formRules = reactive<any>({
budget_doc_id: [{
required: true,
message: '请输入预算书id',
trigger: ['blur']
}],
desc: [{
required: true,
message: '请输入结算说明',
trigger: ['blur']
}],
create_user: [{
required: true,
message: '请输入结算人',
trigger: ['blur']
}],
create_time: [{
required: true,
message: '请输入结算日期',
trigger: ['blur']
}]
})
//
const setFormData = async (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
let res = await apiFinancialDepartmentIncomeSettlementDetailLists({ department_income_settlement_id: data.id })
formData.detail = res.lists
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiFinancialDepartmentIncomeSettlementDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
? await apiFinancialDepartmentIncomeSettlementEdit(data)
: await apiFinancialDepartmentIncomeSettlementAdd(data)
popupRef.value?.close()
emit('success')
}
//
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
const deptList = ref([])
const getDeptList = async () => {
let res = await deptLists()
deptList.value = res.lists
}
getDeptList()
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -0,0 +1,142 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="预算书" prop="budget_doc_id">
<select-remote model="budget_doc_id" :formData="queryParams" :api="apiFinancialBudgetDocSearch" />
</el-form-item>
<el-form-item label="结算人" prop="create_user">
<el-input class="w-[280px]" v-model="queryParams.create_user" clearable placeholder="请输入结算人" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['financial.financial_department_income_settlement/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button v-perms="['financial.financial_department_income_settlement/delete']" :disabled="!selectData.length"
@click="handleDelete(selectData)">
删除
</el-button>
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="预算书编号" prop="budget_doc_code" show-overflow-tooltip />
<el-table-column label="预算书名称" prop="budget_doc_name" show-overflow-tooltip />
<el-table-column label="合同名称" prop="contract_name" show-overflow-tooltip />
<el-table-column label="合同金额" prop="contract_money" show-overflow-tooltip />
<el-table-column label="下达日期" prop="issue_date" show-overflow-tooltip />
<el-table-column label="结算金额" prop="settlement_amount" show-overflow-tooltip />
<el-table-column label="预计分成金额" prop="amount" show-overflow-tooltip />
<el-table-column label="操作" width="170" fixed="right">
<template #default="{ row }">
<el-button v-perms="['financial.financial_department_income_settlement/edit']" type="primary"
link @click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['financial.financial_department_income_settlement/delete']" type="danger"
link @click="handleDelete(row.id)">
删除
</el-button>
<el-button v-perms="['financial.financial_department_income_settlement/detail']" link
@click="handleDetail(row.id)">
详情
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
<detailPage v-if="showDetail" ref="detailRef" @close="showDetail = false" :detailConfig="detailConfig"
:column="2" />
</div>
</template>
<script lang="ts" setup name="financialDepartmentIncomeSettlementLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiFinancialDepartmentIncomeSettlementLists, apiFinancialDepartmentIncomeSettlementDelete, apiFinancialDepartmentIncomeSettlementDetail } from '@/api/financial_department_income_settlement'
import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import { apiFinancialBudgetDocSearch } from '@/api/financial_budget_doc'
import detailConfig from './detail'
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
const detailRef = ref('')
//
const showEdit = ref(false)
const showDetail = ref(false)
//
const queryParams = reactive({
budget_doc_id: '',
create_user: ''
})
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { dictData } = useDictData('budget_share_method')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiFinancialDepartmentIncomeSettlementLists,
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
//
const handleEdit = async (data: any) => {
let res = await apiFinancialDepartmentIncomeSettlementDetail({ 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 apiFinancialDepartmentIncomeSettlementDelete({ id })
getLists()
}
//
const handleDetail = async (id: any) => {
let res = await apiFinancialDepartmentIncomeSettlementDetail({ id })
showDetail.value = true
await nextTick()
detailRef.value?.open()
detailRef.value?.setFormData(res)
}
getLists()
</script>

View File

@ -1,15 +1,15 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit"
@close="handleClose">
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
<el-form-item label="项目名称" prop="project_name">
<el-input v-model="formData.project_name" clearable placeholder="点击选择项目" readonly
@click="showDialog = true" />
</el-form-item>
<el-form-item label="编号" prop="code">
<el-input v-model="formData.code" clearable placeholder="请输入编号" />
<el-input v-model="formData.code" clearable placeholder="请输入编号" v-type="'code'" />
</el-form-item>
<el-form-item label="内容摘要" prop="abstract">
<el-input v-model="formData.abstract" clearable placeholder="请输入内容摘要" />
</el-form-item>
@ -32,7 +32,7 @@
<el-form-item label="传阅人" prop="read_user">
<el-input v-model="formData.read_user" clearable placeholder="请输入传阅人" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-form-item label="备注">
<el-input v-model="formData.remark" clearable placeholder="请输入备注" type="textarea" />
</el-form-item>
<el-form-item label="附件" prop="annex">

View File

@ -1,7 +1,6 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="60vw" @confirm="handleSubmit"
@close="handleClose">
<popup ref="popupRef" :title="popupTitle" :async="true" width="60vw" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
<el-row>
<el-col :span="8">
@ -54,6 +53,8 @@ import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiManageCompanyAdd, apiManageCompanyEdit, apiManageCompanyDetail, apimanage_company_contacts, apimanage_company_contacts_delete } from '@/api/manage_company'
import { manage_project } from "@/components/dialogTable/dialogTableConfig"
import { checkPhone } from "@/utils/validate"
import type { PropType } from 'vue'
defineProps({
dictData: {
@ -151,11 +152,18 @@ const formRules = reactive<any>({
message: '请输入资质等级',
trigger: ['blur']
}],
telephone: [{
required: true,
message: '请输入联系电话',
trigger: ['blur']
}],
telephone: [
{
required: true,
message: '请输入联系电话',
trigger: ['blur']
},
{
validator: checkPhone,
trigger: ['blur']
}
],
duty: [{
required: true,
message: '请输入责任范围',

View File

@ -15,8 +15,7 @@
</el-select>
</el-form-item>
<el-form-item label="资质等级" prop="qualification_grade">
<el-input class="w-[280px]" v-model="queryParams.qualification_grade" clearable
placeholder="请输入资质等级" />
<el-input class="w-[280px]" v-model="queryParams.qualification_grade" clearable placeholder="请输入资质等级" />
</el-form-item>
<el-form-item label="联系电话" prop="telephone">
<el-input class="w-[280px]" v-model="queryParams.telephone" clearable placeholder="请输入联系电话" />
@ -57,8 +56,7 @@
@click="handleDelete(row.id)">
删除
</el-button>
<el-button v-perms="['manage_basic.manage_project/detail']" link
@click="handleDetail(row.id)">
<el-button v-perms="['manage_basic.manage_project/detail']" link @click="handleDetail(row.id)">
详情
</el-button>
</template>
@ -70,8 +68,7 @@
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
<detailPage v-if="showDetail" ref="detailRef" @close="showEdit = false" :detailConfig="detailConfig"
:column="2" />
<detailPage v-if="showDetail" ref="detailRef" @close="showEdit = false" :detailConfig="detailConfig" :column="2" />
</div>
</template>

View File

@ -1,7 +1,6 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit"
@close="handleClose">
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="130px" :rules="formRules">
<el-form-item label="项目名称" prop="project_name">
<el-input v-model="formData.project_name" clearable placeholder="点击选择项目" readonly
@ -27,7 +26,7 @@
<el-form-item label="监理签认情况" prop="sign_info">
<el-input v-model="formData.sign_info" clearable placeholder="请输入监理签认情况" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-form-item label="备注">
<el-input v-model="formData.remark" clearable placeholder="请输入备注" type="textarea" />
</el-form-item>
<el-form-item label="附件" prop="annex">

View File

@ -1,8 +1,7 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit"
@close="handleClose">
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="120px" :rules="formRules">
<el-form-item label="项目名称" prop="project_name">
<el-input v-model="formData.project_name" clearable placeholder="点击选择项目" readonly
@click="showDialog = true" />
@ -18,7 +17,7 @@
<el-form-item label="本月支付(元)" prop="month_pay">
<el-input v-model="formData.month_pay" clearable placeholder="请输入本月支付(元)" type="number" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-form-item label="备注">
<el-input v-model="formData.remark" clearable placeholder="请输入备注" type="textarea" />
</el-form-item>
<el-form-item label="填报人" prop="create_user">

View File

@ -1,7 +1,6 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit"
@close="handleClose">
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="120px" :rules="formRules">
<el-form-item label="项目名称" prop="project_name">
<el-input v-model="formData.project_name" clearable placeholder="点击选择项目" readonly
@ -27,7 +26,7 @@
<el-form-item label="进度描述" prop="desc">
<el-input v-model="formData.desc" clearable placeholder="请输入进度描述" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-form-item label="备注">
<el-input v-model="formData.remark" clearable placeholder="请输入备注" type="textarea" />
</el-form-item>
<el-form-item label="附件" prop="annex">

View File

@ -1,7 +1,6 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit"
@close="handleClose">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="120px" :rules="formRules">
<el-row>
<el-col :span="8">
@ -12,8 +11,8 @@
<el-col :span="8">
<el-form-item label="性质" prop="nature">
<el-select class="flex-1" v-model="formData.nature" clearable placeholder="请选择性质">
<el-option v-for="(item, index) in dictData.cost_consultation_industry_nature"
:key="index" :label="item.name" :value="parseInt(item.value)" />
<el-option v-for="(item, index) in dictData.supervision_project_nature" :key="index"
:label="item.name" :value="parseInt(item.value)" />
</el-select>
</el-form-item>
</el-col>
@ -53,14 +52,12 @@
</el-col>
<el-col :span="8">
<el-form-item label="总投资(元)" prop="total_investment">
<el-input v-model="formData.total_investment" clearable placeholder="请输入总投资(元)"
type="number" />
<el-input v-model="formData.total_investment" clearable placeholder="请输入总投资(元)" type="number" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="工程状态" prop="engineering_status">
<el-select class="flex-1" v-model="formData.engineering_status" clearable
placeholder="请选择工程状态">
<el-select class="flex-1" v-model="formData.engineering_status" clearable placeholder="请选择工程状态">
<el-option v-for="(item, index) in dictData.engineering_status" :key="index"
:label="item.name" :value="parseInt(item.value)" />
</el-select>
@ -85,29 +82,29 @@
</el-col>
<el-col :span="8">
<el-form-item label="计划开工日期" prop="planned_start_date">
<el-date-picker class="flex-1 !flex" v-model="formData.planned_start_date" clearable
type="date" value-format="YYYY-MM-DD" placeholder="请选择日期">
<el-date-picker class="flex-1 !flex" v-model="formData.planned_start_date" clearable type="date"
value-format="YYYY-MM-DD" placeholder="请选择日期">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="计划竣工日期" prop="planned_end_date">
<el-date-picker class="flex-1 !flex" v-model="formData.planned_end_date" clearable
type="date" value-format="YYYY-MM-DD" placeholder="请选择日期">
<el-date-picker class="flex-1 !flex" v-model="formData.planned_end_date" clearable type="date"
value-format="YYYY-MM-DD" placeholder="请选择日期">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="实际开工日期" prop="actual_start_date">
<el-date-picker class="flex-1 !flex" v-model="formData.actual_start_date" clearable
type="date" value-format="YYYY-MM-DD" placeholder="请选择日期">
<el-date-picker class="flex-1 !flex" v-model="formData.actual_start_date" clearable type="date"
value-format="YYYY-MM-DD" placeholder="请选择日期">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="实际竣工日期" prop="actual_end_date">
<el-date-picker class="flex-1 !flex" v-model="formData.actual_end_date" clearable
type="date" value-format="YYYY-MM-DD" placeholder="请选择日期">
<el-date-picker class="flex-1 !flex" v-model="formData.actual_end_date" clearable type="date"
value-format="YYYY-MM-DD" placeholder="请选择日期">
</el-date-picker>
</el-form-item>
</el-col>
@ -128,8 +125,8 @@
</el-col>
<el-col :span="8">
<el-form-item label="立项日期" prop="initiation_date">
<el-date-picker class="flex-1 !flex" v-model="formData.initiation_date" clearable
type="date" value-format="YYYY-MM-DD" placeholder="请选择日期">
<el-date-picker class="flex-1 !flex" v-model="formData.initiation_date" clearable type="date"
value-format="YYYY-MM-DD" placeholder="请选择日期">
</el-date-picker>
</el-form-item>
</el-col>
@ -162,8 +159,8 @@
</el-col>
<el-col :span="8">
<el-form-item label="创建时间" prop="create_time">
<el-date-picker class="flex-1 !flex" v-model="formData.create_time" clearable
type="datetime" value-format="YYYY-MM-DD HH:mm:ss">
<el-date-picker class="flex-1 !flex" v-model="formData.create_time" clearable type="datetime"
value-format="YYYY-MM-DD HH:mm:ss">
</el-date-picker>
</el-form-item>
</el-col>

View File

@ -17,8 +17,8 @@
<el-col :span="6">
<el-form-item label="性质" prop="nature">
<el-select class="flex-1" v-model="queryParams.nature" clearable placeholder="请选择性质">
<el-option v-for="(item, index) in dictData.cost_consultation_industry_nature"
:key="index" :label="item.name" :value="parseInt(item.value)" />
<el-option v-for="(item, index) in dictData.cost_consultation_industry_nature" :key="index"
:label="item.name" :value="parseInt(item.value)" />
</el-select>
</el-form-item>
</el-col>
@ -40,8 +40,7 @@
</el-col>
<el-col :span="6">
<el-form-item label="项目级别" prop="project_level">
<el-select class="flex-1" v-model="queryParams.project_level" clearable
placeholder="请选择项目级别">
<el-select class="flex-1" v-model="queryParams.project_level" clearable placeholder="请选择项目级别">
<el-option v-for="(item, index) in dictData.supervision_project_level" :key="index"
:label="item.name" :value="parseInt(item.value)" />
</el-select>
@ -79,19 +78,21 @@
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="项目编号" prop="project_code" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip
:render-header="pager.calcWidth" />
<el-table-column label="项目编号" prop="project_code" show-overflow-tooltip
:render-header="pager.calcWidth" />
<el-table-column label="性质" prop="nature_text" show-overflow-tooltip />
<el-table-column label="行业" prop="industry_text" show-overflow-tooltip />
<el-table-column label="项目进度" prop="progress" show-overflow-tooltip />
<el-table-column label="建设区域" prop="build_area_text" show-overflow-tooltip />
<el-table-column label="项目级别" prop="project_level_text" show-overflow-tooltip />
<el-table-column label="总投资(元)" prop="total_investment" show-overflow-tooltip />
<el-table-column label="总投资(元)" prop="total_investment" show-overflow-tooltip width="120" />
<el-table-column label="工程状态" prop="engineering_status_text" show-overflow-tooltip />
<el-table-column label="实施部门" prop="implementation_department" show-overflow-tooltip />
<el-table-column label="监管部门" prop="supervision_department" show-overflow-tooltip />
<el-table-column label="项目经理" prop="project_manager" show-overflow-tooltip />
<el-table-column label="操作" width="120" fixed="right">
<el-table-column label="操作" width="170" fixed="right">
<template #default="{ row }">
<el-button v-perms="['manage_basic.manage_project/edit']" type="primary" link
@click="handleEdit(row)">
@ -101,8 +102,7 @@
@click="handleDelete(row.id)">
删除
</el-button>
<el-button v-perms="['manage_basic.manage_project/detail']" link
@click="handleDetail(row.id)">
<el-button v-perms="['manage_basic.manage_project/detail']" link @click="handleDetail(row.id)">
详情
</el-button>
</template>
@ -154,7 +154,7 @@ const handleSelectionChange = (val: any[]) => {
}
//
const { dictData } = useDictData('cost_consultation_industry_nature,industry,const_area,supervision_project_level,engineering_status')
const { dictData } = useDictData('supervision_project_nature,industry,const_area,supervision_project_level,engineering_status')
//
const { pager, getLists, resetParams, resetPage } = usePaging({

View File

@ -1,14 +1,13 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit"
@close="handleClose">
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
<el-form-item label="项目名称" prop="project_name">
<el-input v-model="formData.project_name" clearable placeholder="点击选择项目" readonly
@click="showDialog = true" />
</el-form-item>
<el-form-item label="编号" prop="code">
<el-input v-model="formData.code" clearable placeholder="请输入编号" />
<el-input v-model="formData.code" clearable placeholder="请输入编号" v-type="'code'" />
</el-form-item>
<el-form-item label="内容摘要" prop="abstract">
<el-input v-model="formData.abstract" clearable placeholder="请输入内容摘要" />
@ -27,7 +26,7 @@
<el-form-item label="签收人" prop="accept_user">
<el-input v-model="formData.accept_user" clearable placeholder="请输入签收人" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-form-item label="备注">
<el-input v-model="formData.remark" clearable placeholder="请输入备注" type="textarea" />
</el-form-item>
<el-form-item label="附件" prop="annex">

View File

@ -57,7 +57,7 @@
<el-table-column label="单位">
<template #default="{ row }">
<el-input v-model="row.unit" @input="row.unit = row.unit.replace(/\d+/g, '')" />
<el-input v-model="row.unit" v-type="'unit'" />
</template>
</el-table-column>
<el-table-column label="预算金额">

View File

@ -71,7 +71,7 @@
</el-table-column>
<el-table-column label="单位">
<template #default="{ row }">
<el-input v-model="row.unit" @input="row.unit = row.unit.replace(/\d+/g, '')" />
<el-input v-model="row.unit" v-type="'unit'" />
</template>
</el-table-column>
<el-table-column label="备注" prop="remark">

View File

@ -44,8 +44,7 @@
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="保单号" prop="insurance_no">
<el-input v-model="formData.insurance_no" clearable placeholder="请输入保单号"
@input="formData.insurance_no = formData.insurance_no.replace(/[\u4e00-\u9fa5]/g, '')" />
<el-input v-model="formData.insurance_no" clearable placeholder="请输入保单号" v-type="'code'" />
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="保费(元)" prop="insurance">
@ -67,8 +66,7 @@
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="发票编号" prop="invoice_no">
<el-input v-model="formData.invoice_no" clearable placeholder="请输入发票编号"
@input="formData.invoice_no = formData.invoice_no.replace(/[\u4e00-\u9fa5]/g, '')" />
<el-input v-model="formData.invoice_no" clearable placeholder="请输入发票编号" v-type="'code'" />
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="经办人" prop="handler">

View File

@ -60,7 +60,7 @@
<el-table-column label="单位">
<template #default="{ row }">
<el-input v-model="row.unit" @input="row.unit = row.unit.replace(/\d+/g, '')" />
<el-input v-model="row.unit" v-type="'unit'" />
</template>
</el-table-column>

View File

@ -58,7 +58,7 @@
<el-table-column label="单位">
<template #default="{ row }">
<el-input v-model="row.unit" @input="row.unit = row.unit.replace(/\d+/g, '')" />
<el-input v-model="row.unit" v-type="'unit'" />
</template>
</el-table-column>
<el-table-column label="工作量">

View File

@ -26,8 +26,7 @@
<el-row>
<el-col :span="8">
<el-form-item label="节点编号" prop="node_code">
<el-input v-model="formData.node_code" clearable placeholder="请输入节点编号"
@input="formData.node_code = formData.node_code.replace(/[\u4e00-\u9fa5]/g, '')" />
<el-input v-model="formData.node_code" clearable placeholder="请输入节点编号" v-type="'code'" />
</el-form-item>
</el-col>
<el-col :span="8">

View File

@ -44,7 +44,7 @@
<el-col :span="8">
<el-form-item label="资质编号1">
<el-input v-model="formData.qualification_number_one" clearable placeholder="请输入资质编号1"
@input="formData.qualification_number_one = formData.qualification_number_one.replace(/[\u4e00-\u9fa5]/g, '')" />
v-type="'code'" />
</el-form-item>
</el-col>
@ -74,8 +74,7 @@
<el-col :span="8">
<el-form-item label="资质名称2">
<el-input v-model="formData.qualification_name_two" clearable placeholder="请输入资质名称2"
@input="formData.qualification_name_two = formData.qualification_name_two.replace(/[\u4e00-\u9fa5]/g, '')" />
<el-input v-model="formData.qualification_name_two" clearable placeholder="请输入资质名称2" />
</el-form-item>
</el-col>
<el-col :span="8">
@ -85,7 +84,8 @@
</el-col>
<el-col :span="8">
<el-form-item label="资质编号2">
<el-input v-model="formData.qualification_number_two" clearable placeholder="请输入资质编号2" />
<el-input v-model="formData.qualification_number_two" clearable placeholder="请输入资质编号2"
v-type="'code'" />
</el-form-item>
</el-col>

View File

@ -91,7 +91,7 @@
<el-table-column label="计数单位" prop="unit">
<template #default="{ row }">
<el-input v-model="row.unit" @input="row.unit = row.unit.replace(/\d+/g, '')" />
<el-input v-model="row.unit" v-type="'unit'" />
</template>
</el-table-column>
<el-table-column label="是否合同约定品牌" prop="contract_brand">

View File

@ -28,7 +28,7 @@
<el-col :span="8">
<el-form-item label="资质编号1" prop="qualification_number_one">
<el-input v-model="formData.qualification_number_one" clearable placeholder="请输入资质编号1"
@input="formData.qualification_number_one = formData.qualification_number_one.replace(/[\u4e00-\u9fa5]/g, '')" />
v-type="'code'" />
</el-form-item>
</el-col>
<el-col :span="8">
@ -69,7 +69,7 @@
<el-col :span="8">
<el-form-item label="资质编号2" prop="qualification_number_two">
<el-input v-model="formData.qualification_number_two" clearable placeholder="请输入资质编号2"
@input="formData.qualification_number_two = formData.qualification_number_two.replace(/[\u4e00-\u9fa5]/g, '')" />
v-type="'code'" />
</el-form-item>
</el-col>
<el-col :span="8">

View File

@ -52,7 +52,7 @@
<el-col :span="8">
<el-form-item label="报审表编号">
<el-input v-model="formData.approval_form_code" clearable placeholder="请输入报审表编号"
@input="formData.approval_form_code = formData.approval_form_code.replace(/[\u4e00-\u9fa5]/g, '')" />
v-type="'code'" />
</el-form-item>
</el-col>
<el-col :span="8">

View File

@ -16,8 +16,7 @@
<el-input v-model="formData.model" clearable placeholder="请输入型号" />
</el-form-item>
<el-form-item label="计数单位" prop="unit">
<el-input v-model="formData.unit" clearable placeholder="请输入计数单位"
@input="formData.unit = formData.unit.replace(/\d+/g, '')" />
<el-input v-model="formData.unit" clearable placeholder="请输入计数单位" v-type="'unit'" />
</el-form-item>
<el-form-item label="计划数量" prop="number">
<el-input v-model="formData.number" clearable placeholder="请输入计划数量" type="number" />

View File

@ -14,8 +14,7 @@
<el-input v-model="formData.qualification_name" clearable placeholder="请输入资质名称" />
</el-form-item>
<el-form-item label="资质编号">
<el-input v-model="formData.qualification_number" clearable placeholder="请输入资质编号"
@input="formData.qualification_number = formData.qualification_number.replace(/[\u4e00-\u9fa5]/g, '')" />
<el-input v-model="formData.qualification_number" clearable placeholder="请输入资质编号" v-type="'code'" />
</el-form-item>
<el-form-item label="发证日期">
<el-date-picker class="flex-1 !flex" v-model="formData.get_date" clearable value-format="YYYY-MM-DD "

View File

@ -1,7 +1,6 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit"
@close="handleClose">
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="120px" :rules="formRules">
<el-form-item label="项目名称" prop="project_name">
<el-input v-model="formData.project_name" clearable placeholder="点击选择项目" readonly
@ -19,7 +18,7 @@
<el-form-item label="评审内容" prop="review_content">
<el-input v-model="formData.review_content" clearable placeholder="请输入评审内容" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-form-item label="备注">
<el-input v-model="formData.remark" clearable placeholder="请输入备注" type="textarea" />
</el-form-item>
<createUserLable :formData="formData"></createUserLable>

View File

@ -1,8 +1,7 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit"
@close="handleClose">
<el-form ref="formRef" :model="formData" label-width="180px" :rules="formRules">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="200px" :rules="formRules">
<el-row>
<el-col :span="8">
<el-form-item label="项目名称" prop="project_name">
@ -19,14 +18,14 @@
</el-col>
<el-col :span="8">
<el-form-item label="上月计划工程进度(%" prop="last_month_planned_progress">
<el-input v-model="formData.last_month_planned_progress" clearable
placeholder="请输入上月计划工程进度(%" type="number" />
<el-input v-model="formData.last_month_planned_progress" clearable placeholder="请输入上月计划工程进度(%"
type="number" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="下月计划工程进度(%)" prop="next_month_planned_progress">
<el-input v-model="formData.next_month_planned_progress" clearable
placeholder="请输入下月计划工程进度(%)" type="number" />
<el-input v-model="formData.next_month_planned_progress" clearable placeholder="请输入下月计划工程进度(%)"
type="number" />
</el-form-item>
</el-col>
<el-col :span="8">
@ -37,8 +36,7 @@
</el-col>
<el-col :span="8">
<el-form-item label="工程状态" prop="engineering_status">
<el-select class="flex-1" v-model="formData.engineering_status" clearable
placeholder="请选择工程状态">
<el-select class="flex-1" v-model="formData.engineering_status" clearable placeholder="请选择工程状态">
<el-option v-for="(item, index) in dictData.engineering_status" :key="index"
:label="item.name" :value="parseInt(item.value)" />
</el-select>
@ -62,14 +60,12 @@
</el-col>
<el-col :span="8">
<el-form-item label="累计完成(元)" prop="total_amount">
<el-input v-model="formData.total_amount" clearable placeholder="请输入累计完成(元)"
type="number" />
<el-input v-model="formData.total_amount" clearable placeholder="请输入累计完成(元)" type="number" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="本月支付(元)" prop="this_month_pay">
<el-input v-model="formData.this_month_pay" clearable placeholder="请输入本月支付(元)"
type="number" />
<el-input v-model="formData.this_month_pay" clearable placeholder="请输入本月支付(元)" type="number" />
</el-form-item>
</el-col>
<el-col :span="8">

View File

@ -37,27 +37,27 @@
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip
:render-header="pager.calcWidth" />
<el-table-column label="年月" prop="date" show-overflow-tooltip />
<el-table-column label="上月计划工程进度(%" prop="last_month_planned_progress" show-overflow-tooltip />
<el-table-column label="下月计划工程进度(%)" prop="next_month_planned_progress" show-overflow-tooltip />
<el-table-column label="本月累计工程进度(%" prop="this_month_progress" show-overflow-tooltip />
<el-table-column label="上月计划工程进度(%" prop="last_month_planned_progress" width="200" />
<el-table-column label="下月计划工程进度(%)" prop="next_month_planned_progress" show-overflow-tooltip
width="200" />
<el-table-column label="本月累计工程进度(%" prop="this_month_progress" show-overflow-tooltip width="200" />
<el-table-column label="工程状态" prop="engineering_status_text" show-overflow-tooltip />
<el-table-column label="进度描述" prop="progress_description" show-overflow-tooltip />
<el-table-column label="存在的问题及解决措施" prop="problems_and_measure" show-overflow-tooltip />
<el-table-column label="本月完成(元)" prop="this_month_amount" show-overflow-tooltip />
<el-table-column label="累计完成(元)" prop="total_amount" show-overflow-tooltip />
<el-table-column label="本月支付(元)" prop="this_month_pay" show-overflow-tooltip />
<el-table-column label="累计支付(元)" prop="total_pay" show-overflow-tooltip />
<el-table-column label="建设各方责任主体质量行为" prop="quality_behavior" show-overflow-tooltip />
<el-table-column label="施工现场质量情况" prop="quality_situation" show-overflow-tooltip />
<el-table-column label="质量缺陷或质量隐患的处理情况" prop="quality_hazards" show-overflow-tooltip />
<el-table-column label="检查及抽检情况" prop="sampling_situation" show-overflow-tooltip />
<el-table-column label="其他质量情况" prop="other_quality_conditions" show-overflow-tooltip />
<el-table-column label="本月安全情况" prop="safety_situation" show-overflow-tooltip />
<el-table-column label="存在的问题及解决措施" prop="problems_and_measure" show-overflow-tooltip width="200" />
<el-table-column label="本月完成(元)" prop="this_month_amount" show-overflow-tooltip width="140" />
<el-table-column label="累计完成(元)" prop="total_amount" show-overflow-tooltip width="140" />
<el-table-column label="本月支付(元)" prop="this_month_pay" show-overflow-tooltip width="140" />
<el-table-column label="累计支付(元)" prop="total_pay" show-overflow-tooltip width="140" />
<el-table-column label="建设各方责任主体质量行为" prop="quality_behavior" show-overflow-tooltip width="200" />
<el-table-column label="施工现场质量情况" prop="quality_situation" show-overflow-tooltip width="160" />
<el-table-column label="检查及抽检情况" prop="sampling_situation" show-overflow-tooltip width="160" />
<el-table-column label="其他质量情况" prop="other_quality_conditions" show-overflow-tooltip width="120" />
<el-table-column label="本月安全情况" prop="safety_situation" show-overflow-tooltip width="120" />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
<el-table-column label="操作" width="150" align="center" fixed="right">
<template #default="{ row }">
<el-button v-perms="['supervision_connect.supervision_project_monthly_report/edit']"
type="primary" link @click="handleEdit(row)">