From 169f5ae376bfcdafdb7ffcaea1af0a3f18c84b43 Mon Sep 17 00:00:00 2001 From: tcy <1193318383@qq.com> Date: Fri, 22 Aug 2025 21:08:56 +0800 Subject: [PATCH] =?UTF-8?q?feat(ctr):=20=E4=BC=98=E5=8C=96=E5=90=88?= =?UTF-8?q?=E5=90=8C=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 优化富文本编辑器组件,增加占位符功能 - 在费用合同和收入合同列表中添加支付方式列 - 增加合同内容详情对话框,用于查看分包内容 - 在收入合同列表中添加修改合同功能 - 根据合同类型动态显示承包内容或合同内容 --- src/components/Editor/index.vue | 49 +++-- src/views/ctr/expensesContract/index.vue | 33 ++- src/views/ctr/incomeContract/index.vue | 49 ++++- src/views/ctr/index.vue | 5 +- src/views/ctr/update/index.vue | 246 +++++++++++++++++++++++ 5 files changed, 352 insertions(+), 30 deletions(-) create mode 100644 src/views/ctr/update/index.vue diff --git a/src/components/Editor/index.vue b/src/components/Editor/index.vue index ba70fbb..2b569d0 100644 --- a/src/components/Editor/index.vue +++ b/src/components/Editor/index.vue @@ -1,28 +1,14 @@ @@ -47,7 +33,9 @@ const props = defineProps({ /* 上传文件大小限制(MB) */ fileSize: propTypes.number.def(5), /* 类型(base64格式、url格式) */ - type: propTypes.string.def('url') + type: propTypes.string.def('url'), + /* 占位符 */ + placeholder: propTypes.string.def('请输入内容'), }); const { proxy } = getCurrentInstance() as ComponentInternalInstance; @@ -90,7 +78,7 @@ const options = ref({ } } }, - placeholder: '请输入内容', + placeholder: props.placeholder, readOnly: props.readOnly }); @@ -166,77 +154,96 @@ const handleUploadError = (err: any) => { .editor-img-uploader { display: none; } + .editor, .ql-toolbar { white-space: pre-wrap !important; line-height: normal !important; } + .quill-img { display: none; } + .ql-snow .ql-tooltip[data-mode='link']::before { content: '请输入链接地址:'; } + .ql-snow .ql-tooltip.ql-editing a.ql-action::after { border-right: 0; content: '保存'; padding-right: 0; } + .ql-snow .ql-tooltip[data-mode='video']::before { content: '请输入视频地址:'; } + .ql-snow .ql-picker.ql-size .ql-picker-label::before, .ql-snow .ql-picker.ql-size .ql-picker-item::before { content: '14px'; } + .ql-snow .ql-picker.ql-size .ql-picker-label[data-value='small']::before, .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='small']::before { content: '10px'; } + .ql-snow .ql-picker.ql-size .ql-picker-label[data-value='large']::before, .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='large']::before { content: '18px'; } + .ql-snow .ql-picker.ql-size .ql-picker-label[data-value='huge']::before, .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='huge']::before { content: '32px'; } + .ql-snow .ql-picker.ql-header .ql-picker-label::before, .ql-snow .ql-picker.ql-header .ql-picker-item::before { content: '文本'; } + .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='1']::before, .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='1']::before { content: '标题1'; } + .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='2']::before, .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='2']::before { content: '标题2'; } + .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='3']::before, .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='3']::before { content: '标题3'; } + .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='4']::before, .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='4']::before { content: '标题4'; } + .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='5']::before, .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='5']::before { content: '标题5'; } + .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='6']::before, .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='6']::before { content: '标题6'; } + .ql-snow .ql-picker.ql-font .ql-picker-label::before, .ql-snow .ql-picker.ql-font .ql-picker-item::before { content: '标准字体'; } + .ql-snow .ql-picker.ql-font .ql-picker-label[data-value='serif']::before, .ql-snow .ql-picker.ql-font .ql-picker-item[data-value='serif']::before { content: '衬线字体'; } + .ql-snow .ql-picker.ql-font .ql-picker-label[data-value='monospace']::before, .ql-snow .ql-picker.ql-font .ql-picker-item[data-value='monospace']::before { content: '等宽字体'; diff --git a/src/views/ctr/expensesContract/index.vue b/src/views/ctr/expensesContract/index.vue index 6ad4a81..91cb795 100644 --- a/src/views/ctr/expensesContract/index.vue +++ b/src/views/ctr/expensesContract/index.vue @@ -60,12 +60,18 @@ - + + + + @@ -85,9 +91,13 @@ --> - + +
+ 查看分包内容 +
+
查看附件列表 - +
@@ -128,7 +138,17 @@ + + + + @@ -156,6 +176,8 @@ const userStore = useUserStore(); const queryFormRef = ref(); const expensesContractFormRef = ref(); const currentProject = computed(() => userStore.selectedProject); +const detailContent = ref(''); +const detailVisible = ref(false); // 控制承包内容详情对话框的显示 const dialog = reactive({ visible: false, @@ -299,7 +321,10 @@ const handleShowFileList = async (row: ExpensesContractVO) => { }); } - +const handleShowDetail = (data) => { + detailContent.value = data.contractedContent + detailVisible.value = true; +} onMounted(() => { getList(); }); diff --git a/src/views/ctr/incomeContract/index.vue b/src/views/ctr/incomeContract/index.vue index ee2d04e..af3991a 100644 --- a/src/views/ctr/incomeContract/index.vue +++ b/src/views/ctr/incomeContract/index.vue @@ -61,6 +61,12 @@
+ + + @@ -82,10 +88,17 @@ - - 查看附件列表 - +
+ 修改合同 +
+
+ 查看分包内容 +
+
+ 查看附件列表 +
@@ -123,6 +136,17 @@ + + + + + @@ -131,9 +155,12 @@ import { listIncomeContract, getIncomeContract, delIncomeContract, addIncomeCont import { IncomeContractVO, IncomeContractQuery, IncomeContractForm } from '@/api/ctr/incomeContract/types'; import FileList from '@/components/FileList/index.vue'; import useUserStore from '@/store/modules/user'; +import { useRouter } from 'vue-router' + const { proxy } = getCurrentInstance(); const userStore = useUserStore(); const currentProject = computed(() => userStore.selectedProject); +const router = useRouter(); const { expenses_contract_type, income_contract_type } = toRefs( proxy?.useDict('income_contract_type', 'expenses_contract_type') @@ -154,7 +181,8 @@ const dialog = reactive({ visible: false, title: '' }); - +const detailVisible = ref(false); // 控制承包内容详情对话框的显示 +const detailContent = ref(''); const initFormData: IncomeContractForm = { id: undefined, projectId: undefined, @@ -292,7 +320,20 @@ const handleShowFileList = async (row: IncomeContractVO) => { }); } +const handleEdit = (row: IncomeContractVO) => { + // console.log(router); + router.push({ + path: "/ctr/update", + query: { + id: row.id, + } + }) +} +const handleShowDetail = (data) => { + detailContent.value = data.contractedContent + detailVisible.value = true; +} onMounted(() => { getList(); }); diff --git a/src/views/ctr/index.vue b/src/views/ctr/index.vue index 0412f38..25b464d 100644 --- a/src/views/ctr/index.vue +++ b/src/views/ctr/index.vue @@ -33,7 +33,10 @@ - + + + + diff --git a/src/views/ctr/update/index.vue b/src/views/ctr/update/index.vue new file mode 100644 index 0000000..13be196 --- /dev/null +++ b/src/views/ctr/update/index.vue @@ -0,0 +1,246 @@ + + +