From 2cdbc64250818f3515d9416fc08395dffa59211d Mon Sep 17 00:00:00 2001
From: dev_ljl <2590379346@qq.com>
Date: Thu, 14 Aug 2025 14:58:42 +0800
Subject: [PATCH] =?UTF-8?q?feat:=E8=B0=83=E6=9F=A5=E9=97=AE=E5=8D=B7?=
=?UTF-8?q?=E7=AE=A1=E7=90=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../customerService/questionnaire/data.ts | 158 +++++++
.../customerService/questionnaire/index.vue | 231 ++++++++++
.../questionnaire/questionnaire-detail.vue | 96 ++++
.../questionnaire/questionnaire-modal.vue | 421 ++++++++++++++++++
4 files changed, 906 insertions(+)
create mode 100644 apps/web-antd/src/views/property/customerService/questionnaire/data.ts
create mode 100644 apps/web-antd/src/views/property/customerService/questionnaire/index.vue
create mode 100644 apps/web-antd/src/views/property/customerService/questionnaire/questionnaire-detail.vue
create mode 100644 apps/web-antd/src/views/property/customerService/questionnaire/questionnaire-modal.vue
diff --git a/apps/web-antd/src/views/property/customerService/questionnaire/data.ts b/apps/web-antd/src/views/property/customerService/questionnaire/data.ts
new file mode 100644
index 00000000..933e55ec
--- /dev/null
+++ b/apps/web-antd/src/views/property/customerService/questionnaire/data.ts
@@ -0,0 +1,158 @@
+import type { FormSchemaGetter } from '#/adapter/form';
+import type { VxeGridProps } from '#/adapter/vxe-table';
+import { getDictOptions } from '#/utils/dict';
+import { renderDict } from '#/utils/render';
+import {h} from "vue";
+import {Rate} from "ant-design-vue";
+
+export const querySchema: FormSchemaGetter = () => [
+ {
+ component: 'Select',
+ componentProps: {
+ options: getDictOptions('type_contingency_plan'),
+ },
+ fieldName: 'contingenPlanType',
+ label: '预案类型',
+ },
+ {
+ component: 'ApiSelect',
+ fieldName: 'dutyPersion',
+ label: '责任人',
+ },
+ {
+ component: 'Select',
+ componentProps: {
+ options: getDictOptions('pro_exercise_status'),
+ },
+ fieldName: 'status',
+ label: '演练状态',
+ },
+];
+
+export const columns: VxeGridProps['columns'] = [
+ { type: 'checkbox', width: 60 },
+ {
+ title: '序号',
+ field: 'id',
+ slots: {
+ default: ({rowIndex}) => {
+ return (rowIndex + 1).toString();
+ }
+ }
+ },
+ {
+ title: '预案名称',
+ field: 'contingenPlanName',
+ },
+ {
+ title: '预案类型',
+ field: 'contingenPlanType',
+ slots: {
+ default: ({ row }) => {
+ return renderDict(row.contingenPlanType, 'type_contingency_plan');
+ },
+ },
+ },
+ {
+ title: '风险等级',
+ field: 'grade',
+ slots: {
+ default: ({ row }) => {
+ return h(Rate, {
+ value: row.grade || 0,
+ disabled: true,
+ });
+ },
+ },
+ minWidth: '150'
+ },
+ {
+ title: '发起人',
+ field: 'initiatName',
+ },
+ {
+ title: '演练状态',
+ field: 'status',
+ slots: {
+ default: ({ row }) => {
+ return renderDict(row.status, 'pro_exercise_status');
+ },
+ },
+ },
+ {
+ title: '责任人',
+ field: 'dutyPersionName',
+ },
+ {
+ title: '完成时间',
+ field: 'compleTimes',
+ },
+ {
+ field: 'action',
+ fixed: 'right',
+ slots: { default: 'action' },
+ title: '操作',
+ width: 240,
+ },
+];
+
+export const modalSchema: FormSchemaGetter = () => [
+ {
+ label: '主键',
+ fieldName: 'id',
+ component: 'Input',
+ dependencies: {
+ show: () => false,
+ triggerFields: [''],
+ },
+ },
+ {
+ label: '预案名称',
+ fieldName: 'contingenPlanName',
+ component: 'Input',
+ rules: 'required',
+ },
+ {
+ label: '预案类型',
+ fieldName: 'contingenPlanType',
+ component: 'Select',
+ componentProps: {
+ options: getDictOptions('type_contingency_plan'),
+ },
+ rules: 'selectRequired',
+ },
+ {
+ label: '发起人',
+ fieldName: 'initiat',
+ component: 'ApiSelect',
+ rules: 'selectRequired',
+ },
+ {
+ label: '责任人',
+ fieldName: 'dutyPersion',
+ component: 'ApiSelect',
+ rules: 'selectRequired',
+ },
+ {
+ label: '预案内容',
+ fieldName: 'contingenPlanContent',
+ component: 'RichTextarea',
+ componentProps: {
+ // disabled: false, // 是否只读
+ // height: 400 // 高度 默认400
+ },
+ formItemClass: 'col-span-2'
+ },
+ {
+ label: '风险等级',
+ fieldName: 'grade',
+ component: 'Rate',
+ componentProps: {
+ allowHalf: false,
+ count: 5,
+ tooltips: ['1星', '2星', '3星', '4星', '5星'],
+ defaultValue: 0
+ },
+ rules: 'required',
+ },
+];
diff --git a/apps/web-antd/src/views/property/customerService/questionnaire/index.vue b/apps/web-antd/src/views/property/customerService/questionnaire/index.vue
new file mode 100644
index 00000000..149a5bd4
--- /dev/null
+++ b/apps/web-antd/src/views/property/customerService/questionnaire/index.vue
@@ -0,0 +1,231 @@
+
+
+
+
+
+
+
+
+ {{ $t('pages.common.export') }}
+
+
+ {{ $t('pages.common.delete') }}
+
+
+ {{ $t('pages.common.add') }}
+
+
+
+
+
+
+
+ {{ '审核' }}
+
+
+
+ {{ $t('pages.common.info') }}
+
+
+ {{ $t('pages.common.edit') }}
+
+
+
+ {{ $t('pages.common.delete') }}
+
+
+
+
+
+
+
+
+
diff --git a/apps/web-antd/src/views/property/customerService/questionnaire/questionnaire-detail.vue b/apps/web-antd/src/views/property/customerService/questionnaire/questionnaire-detail.vue
new file mode 100644
index 00000000..bf8fb9a2
--- /dev/null
+++ b/apps/web-antd/src/views/property/customerService/questionnaire/questionnaire-detail.vue
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+ {{ contingenPlanIDetail.contingenPlanName }}
+
+
+ {{ contingenPlanIDetail.createTime }}
+
+
+
+
+
+ {{ contingenPlanIDetail.updateTime }}
+
+
+
+
+
+ {{ contingenPlanIDetail.compleTimes }}
+
+
+ {{ contingenPlanIDetail.initiatName }}
+
+
+ {{ contingenPlanIDetail.dutyPersionName}}
+
+
+
+
+
+
+
+
+
+
+ 处理记录
+
+
+
+ 类型:
+
+ 时间:{{item.createTime}}
+ 处理人:{{item.handlerName}}
+
+
+
+
diff --git a/apps/web-antd/src/views/property/customerService/questionnaire/questionnaire-modal.vue b/apps/web-antd/src/views/property/customerService/questionnaire/questionnaire-modal.vue
new file mode 100644
index 00000000..f49a0444
--- /dev/null
+++ b/apps/web-antd/src/views/property/customerService/questionnaire/questionnaire-modal.vue
@@ -0,0 +1,421 @@
+
+
+
+
+
+
+
+
+
+ 单行文本
+
+
+ 多行文本
+
+
+ 单选题
+
+
+ 多选题
+
+
+ 评分题
+
+
+ 日期选择
+
+
+
+
+
+
+
+
+
+
+
+