From 0bf7e6a57b454586fc1c8153599d30ea63c7f30b Mon Sep 17 00:00:00 2001 From: wuxw <928255095@qq.com> Date: Tue, 24 Jun 2025 18:27:56 +0800 Subject: [PATCH] 加入问卷功能代码 --- src/api/community/communityApi.js | 12 ++++++++++++ src/api/oa/addQuestionAnswerApi.js | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/api/oa/editQuestionAnswerApi.js | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/api/oa/notepadManageApi.js | 163 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/api/oa/printQuestionAnswerApi.js | 33 +++++++++++++++++++++++++++++++++ src/api/oa/printQuestionAnswerDetailApi.js | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ src/api/oa/questionAnswerManageApi.js | 97 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/api/oa/questionTitleApi.js | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/api/oa/visitManageApi.js | 45 +++++++++++++++++++++++++++++++++++++++++++++ src/components/oa/addNotepadDetail.vue | 122 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/components/oa/addQuestionTitle.vue | 134 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/components/oa/chooseQuestionTitle.vue | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/components/oa/deleteNotepad.vue | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/components/oa/deleteQuestionAnswer.vue | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/components/oa/deleteQuestionTitle.vue | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/components/oa/editNotepad.vue | 158 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/components/oa/editQuestionAnswer.vue | 203 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/components/oa/editQuestionTitle.vue | 141 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/components/oa/notepadDetail.vue | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/components/oa/notepadOwnerRepair.vue | 202 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/components/oa/publishQuestionAnswer.vue | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/components/oa/uploadImageUrl.vue | 153 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/components/room/selectRooms.vue | 162 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/i18n/oaI18n.js | 25 ++++++++++++++++++++++++- src/router/index.js | 20 +++++++++++++++----- src/router/oaRouter.js | 31 +++++++++++++++++++++++++++++++ src/views/oa/addQuestionAnswerLang.js | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/views/oa/addQuestionAnswerList.vue | 252 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/views/oa/editQuestionAnswerLang.js | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/views/oa/editQuestionAnswerList.vue | 270 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/views/oa/notepadManageLang.js | 192 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/views/oa/notepadManageList.vue | 265 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/views/oa/printQuestionAnswerDetailLang.js | 38 ++++++++++++++++++++++++++++++++++++++ src/views/oa/printQuestionAnswerDetailList.vue | 269 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/views/oa/printQuestionAnswerLang.js | 46 ++++++++++++++++++++++++++++++++++++++++++++++ src/views/oa/printQuestionAnswerList.vue | 184 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/views/oa/questionAnswerManageLang.js | 180 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/views/oa/questionAnswerManageList.vue | 199 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/views/oa/questionTitleLang.js | 136 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/views/oa/questionTitleList.vue | 210 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/views/oa/visitManageLang.js | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/views/oa/visitManageList.vue | 341 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 42 files changed, 5405 insertions(+), 6 deletions(-) create mode 100644 src/api/oa/addQuestionAnswerApi.js create mode 100644 src/api/oa/editQuestionAnswerApi.js create mode 100644 src/api/oa/notepadManageApi.js create mode 100644 src/api/oa/printQuestionAnswerApi.js create mode 100644 src/api/oa/printQuestionAnswerDetailApi.js create mode 100644 src/api/oa/questionAnswerManageApi.js create mode 100644 src/api/oa/questionTitleApi.js create mode 100644 src/api/oa/visitManageApi.js create mode 100644 src/components/oa/addNotepadDetail.vue create mode 100644 src/components/oa/addQuestionTitle.vue create mode 100644 src/components/oa/chooseQuestionTitle.vue create mode 100644 src/components/oa/deleteNotepad.vue create mode 100644 src/components/oa/deleteQuestionAnswer.vue create mode 100644 src/components/oa/deleteQuestionTitle.vue create mode 100644 src/components/oa/editNotepad.vue create mode 100644 src/components/oa/editQuestionAnswer.vue create mode 100644 src/components/oa/editQuestionTitle.vue create mode 100644 src/components/oa/notepadDetail.vue create mode 100644 src/components/oa/notepadOwnerRepair.vue create mode 100644 src/components/oa/publishQuestionAnswer.vue create mode 100644 src/components/oa/uploadImageUrl.vue create mode 100644 src/components/room/selectRooms.vue create mode 100644 src/views/oa/addQuestionAnswerLang.js create mode 100644 src/views/oa/addQuestionAnswerList.vue create mode 100644 src/views/oa/editQuestionAnswerLang.js create mode 100644 src/views/oa/editQuestionAnswerList.vue create mode 100644 src/views/oa/notepadManageLang.js create mode 100644 src/views/oa/notepadManageList.vue create mode 100644 src/views/oa/printQuestionAnswerDetailLang.js create mode 100644 src/views/oa/printQuestionAnswerDetailList.vue create mode 100644 src/views/oa/printQuestionAnswerLang.js create mode 100644 src/views/oa/printQuestionAnswerList.vue create mode 100644 src/views/oa/questionAnswerManageLang.js create mode 100644 src/views/oa/questionAnswerManageList.vue create mode 100644 src/views/oa/questionTitleLang.js create mode 100644 src/views/oa/questionTitleList.vue create mode 100644 src/views/oa/visitManageLang.js create mode 100644 src/views/oa/visitManageList.vue diff --git a/src/api/community/communityApi.js b/src/api/community/communityApi.js index 831ff6d..ad79679 100644 --- a/src/api/community/communityApi.js +++ b/src/api/community/communityApi.js @@ -57,6 +57,18 @@ export function getCommunityId() { return getCurrentCommunity().communityId } +/************* ✨ Windsurf Command ⭐ *************/ +/** + * Get the current community + * @returns {Object} The current community object + */ +/******* 8c78c7d7-a438-4630-a8c7-b05b9f491159 *******/ + + +export function getCommunity() { + return getCurrentCommunity() +} + export function getCommunityName() { diff --git a/src/api/oa/addQuestionAnswerApi.js b/src/api/oa/addQuestionAnswerApi.js new file mode 100644 index 0000000..ccb5cd8 --- /dev/null +++ b/src/api/oa/addQuestionAnswerApi.js @@ -0,0 +1,74 @@ +import request from '@/utils/request' +import { getCommunityId } from '@/api/community/communityApi' + +// 查询楼栋和单元信息 +export function queryFloorAndUnits(params) { + return new Promise((resolve, reject) => { + request({ + url: '/floor.queryFloorAndUnits', + method: 'get', + params: { + ...params, + communityId: params.communityId || getCommunityId() + } + }).then(response => { + resolve(response.data) + }).catch(error => { + reject(error) + }) + }) +} + +// 查询房屋信息 +export function queryRooms(params) { + return new Promise((resolve, reject) => { + request({ + url: '/room.queryRooms', + method: 'get', + params: { + ...params, + communityId: params.communityId || getCommunityId() + } + }).then(response => { + resolve(response.data) + }).catch(error => { + reject(error) + }) + }) +} + +// 查询题目列表 +export function listQuestionTitle(params) { + return new Promise((resolve, reject) => { + request({ + url: '/question.listQuestionTitle', + method: 'get', + params: { + ...params, + communityId: params.communityId || getCommunityId() + } + }).then(response => { + resolve(response.data) + }).catch(error => { + reject(error) + }) + }) +} + +// 保存问卷 +export function saveQuestionAnswer(data) { + return new Promise((resolve, reject) => { + request({ + url: '/question.saveQuestionAnswer', + method: 'post', + data: { + ...data, + communityId: data.communityId || getCommunityId() + } + }).then(response => { + resolve(response.data) + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/api/oa/editQuestionAnswerApi.js b/src/api/oa/editQuestionAnswerApi.js new file mode 100644 index 0000000..57f81c8 --- /dev/null +++ b/src/api/oa/editQuestionAnswerApi.js @@ -0,0 +1,81 @@ +import request from '@/utils/request' + +// 查询问卷信息 +export function listQuestionAnswer(params) { + return new Promise((resolve, reject) => { + request({ + url: '/question.listQuestionAnswer', + method: 'get', + params + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 更新问卷信息 +export function updateQuestionAnswer(data) { + return new Promise((resolve, reject) => { + request({ + url: '/question.updateQuestionAnswer', + method: 'post', + data + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 查询题目列表 +export function listQuestionTitle(params) { + return new Promise((resolve, reject) => { + request({ + url: '/question.listQuestionTitle', + method: 'get', + params + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 查询楼栋和单元信息 +export function queryFloorAndUnits(params) { + return new Promise((resolve, reject) => { + request({ + url: '/floor.queryFloorAndUnits', + method: 'get', + params + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 查询房屋信息 +export function queryRooms(params) { + return new Promise((resolve, reject) => { + request({ + url: '/room.queryRooms', + method: 'get', + params + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/api/oa/notepadManageApi.js b/src/api/oa/notepadManageApi.js new file mode 100644 index 0000000..964e1cb --- /dev/null +++ b/src/api/oa/notepadManageApi.js @@ -0,0 +1,163 @@ +import request from '@/utils/request' +import { getCommunityId } from '@/api/community/communityApi' + +// 获取记事本列表 +export function listNotepad(params) { + return new Promise((resolve, reject) => { + request({ + url: '/notepad.listNotepad', + method: 'get', + params: { + ...params, + communityId: getCommunityId() + } + }).then(response => { + const res = response.data + resolve({ + data: res.data, + total: res.total + }) + }).catch(error => { + reject(error) + }) + }) +} + +// 更新记事本 +export function updateNotepad(data) { + return new Promise((resolve, reject) => { + request({ + url: '/notepad.updateNotepad', + method: 'post', + data: { + ...data, + communityId: getCommunityId() + } + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 删除记事本 +export function deleteNotepad(data) { + return new Promise((resolve, reject) => { + request({ + url: '/notepad.deleteNotepad', + method: 'post', + data: { + ...data, + communityId: getCommunityId() + } + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 保存记事本详情 +export function saveNotepadDetail(data) { + return new Promise((resolve, reject) => { + request({ + url: '/notepad.saveNotepadDetail', + method: 'post', + data: { + ...data, + communityId: getCommunityId() + } + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 获取记事本详情列表 +export function listNotepadDetail(params) { + return new Promise((resolve, reject) => { + request({ + url: '/notepad.listNotepadDetail', + method: 'get', + params: { + ...params, + communityId: getCommunityId() + } + }).then(response => { + const res = response.data + resolve({ + data: res.data, + total: res.total + }) + }).catch(error => { + reject(error) + }) + }) +} + +// 删除记事本详情 +export function deleteNotepadDetail(data) { + return new Promise((resolve, reject) => { + request({ + url: '/notepad.deleteNotepadDetail', + method: 'post', + data: { + ...data, + communityId: getCommunityId() + } + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 保存业主报修信息 +export function saveOwnerRepair(data) { + return new Promise((resolve, reject) => { + request({ + url: '/ownerRepair.saveOwnerRepair', + method: 'post', + data: { + ...data, + communityId: getCommunityId() + } + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 获取报修设置列表 +export function listRepairSettings(params) { + return new Promise((resolve, reject) => { + request({ + url: '/repair.listRepairSettings', + method: 'get', + params: { + ...params, + communityId: getCommunityId() + } + }).then(response => { + const res = response.data + resolve({ + data: res.data, + total: res.total + }) + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/api/oa/printQuestionAnswerApi.js b/src/api/oa/printQuestionAnswerApi.js new file mode 100644 index 0000000..4eef8e6 --- /dev/null +++ b/src/api/oa/printQuestionAnswerApi.js @@ -0,0 +1,33 @@ +import request from '@/utils/request' + +// 获取问题答案列表 +export function listQuestionAnswer(params) { + return new Promise((resolve, reject) => { + request({ + url: '/question.listQuestionAnswer', + method: 'get', + params + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 获取问题标题列表 +export function listQuestionTitle(params) { + return new Promise((resolve, reject) => { + request({ + url: '/question.listQuestionTitle', + method: 'get', + params + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/api/oa/printQuestionAnswerDetailApi.js b/src/api/oa/printQuestionAnswerDetailApi.js new file mode 100644 index 0000000..4badbc1 --- /dev/null +++ b/src/api/oa/printQuestionAnswerDetailApi.js @@ -0,0 +1,49 @@ +import request from '@/utils/request' + +// 获取问题回答列表 +export function listQuestionAnswer(params) { + return new Promise((resolve, reject) => { + request({ + url: '/question.listQuestionAnswer', + method: 'get', + params + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 获取问题标题列表 +export function listQuestionTitle(params) { + return new Promise((resolve, reject) => { + request({ + url: '/question.listQuestionTitle', + method: 'get', + params + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 获取用户问题回答列表 +export function listUserQuestionAnswer(params) { + return new Promise((resolve, reject) => { + request({ + url: '/question.listUserQuestionAnswer', + method: 'get', + params + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/api/oa/questionAnswerManageApi.js b/src/api/oa/questionAnswerManageApi.js new file mode 100644 index 0000000..6458d1e --- /dev/null +++ b/src/api/oa/questionAnswerManageApi.js @@ -0,0 +1,97 @@ +import request from '@/utils/request' +import { getCommunityId } from '@/api/community/communityApi' + +// 获取问卷列表 +export function listQuestionAnswer(params) { + return new Promise((resolve, reject) => { + request({ + url: '/question.listQuestionAnswer', + method: 'get', + params: { + ...params, + communityId: getCommunityId() + } + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 更新问卷信息 +export function updateQuestionAnswer(data) { + return new Promise((resolve, reject) => { + request({ + url: '/questionAnswer.updateQuestionAnswer', + method: 'post', + data: { + ...data, + communityId: getCommunityId() + } + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 删除问卷 +export function deleteQuestionAnswer(params) { + return new Promise((resolve, reject) => { + request({ + url: '/question.deleteQuestionAnswer', + method: 'post', + data: { + ...params, + communityId: getCommunityId() + } + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 发布问卷 +export function publishQuestionAnswer(data) { + return new Promise((resolve, reject) => { + request({ + url: '/question.publishQuestion', + method: 'post', + data: { + ...data, + communityId: getCommunityId() + } + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 上传图片 +export function uploadImage(data) { + return new Promise((resolve, reject) => { + request({ + url: '/uploadImage', + method: 'post', + headers: { + 'Content-Type': 'multipart/form-data' + }, + data + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/api/oa/questionTitleApi.js b/src/api/oa/questionTitleApi.js new file mode 100644 index 0000000..5cb047f --- /dev/null +++ b/src/api/oa/questionTitleApi.js @@ -0,0 +1,82 @@ +import request from '@/utils/request' +import { getCommunityId } from '@/api/community/communityApi' + +// 获取题目列表 +export function listQuestionTitle(params) { + return new Promise((resolve, reject) => { + const communityId = getCommunityId() + request({ + url: '/question.listQuestionTitle', + method: 'get', + params: { + ...params, + communityId + } + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 添加题目 +export function saveQuestionTitle(data) { + return new Promise((resolve, reject) => { + const communityId = getCommunityId() + request({ + url: '/question.saveQuestionTitle', + method: 'post', + data: { + ...data, + communityId + } + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 更新题目 +export function updateQuestionTitle(data) { + return new Promise((resolve, reject) => { + const communityId = getCommunityId() + request({ + url: '/question.updateQuestionTitle', + method: 'post', + data: { + ...data, + communityId + } + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 删除题目 +export function deleteQuestionTitle(data) { + return new Promise((resolve, reject) => { + const communityId = getCommunityId() + request({ + url: '/question.deleteQuestionTitle', + method: 'post', + data: { + ...data, + communityId + } + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/api/oa/visitManageApi.js b/src/api/oa/visitManageApi.js new file mode 100644 index 0000000..c62f74f --- /dev/null +++ b/src/api/oa/visitManageApi.js @@ -0,0 +1,45 @@ +import request from '@/utils/request' + +// 获取访客列表 +export function listVisits(params) { + return new Promise((resolve, reject) => { + request({ + url: '/iot.getOpenApi', + method: 'get', + params: { + ...params, + iotApiCode: 'listVisitBmoImpl' + } + }).then(response => { + const res = response.data + resolve({ + data: res.data, + total: res.total + }) + }).catch(error => { + reject(error) + }) + }) +} + +// 获取访客类型列表 +export function listVisitTypes(params) { + return new Promise((resolve, reject) => { + request({ + url: '/iot.getOpenApi', + method: 'get', + params: { + ...params, + iotApiCode: 'listVisitTypeBmoImpl' + } + }).then(response => { + const res = response.data + resolve({ + data: res.data, + total: res.total + }) + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/components/oa/addNotepadDetail.vue b/src/components/oa/addNotepadDetail.vue new file mode 100644 index 0000000..677129b --- /dev/null +++ b/src/components/oa/addNotepadDetail.vue @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + {{ $t('common.cancel') }} + {{ $t('common.save') }} + + + + + \ No newline at end of file diff --git a/src/components/oa/addQuestionTitle.vue b/src/components/oa/addQuestionTitle.vue new file mode 100644 index 0000000..1c2b4ea --- /dev/null +++ b/src/components/oa/addQuestionTitle.vue @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + {{ $t('questionTitle.add.addOption') }} + + + {{ $t('questionTitle.add.removeOption') }} + + + + + + + + + + + + \ No newline at end of file diff --git a/src/components/oa/chooseQuestionTitle.vue b/src/components/oa/chooseQuestionTitle.vue new file mode 100644 index 0000000..d0c56ea --- /dev/null +++ b/src/components/oa/chooseQuestionTitle.vue @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + {{ $t('chooseQuestionTitle.table.choose') }} + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/components/oa/deleteNotepad.vue b/src/components/oa/deleteNotepad.vue new file mode 100644 index 0000000..8f308d6 --- /dev/null +++ b/src/components/oa/deleteNotepad.vue @@ -0,0 +1,56 @@ + + + + {{ $t('notepadManage.delete.confirm') }} + + + {{ $t('common.cancel') }} + {{ $t('common.confirm') }} + + + + + + + \ No newline at end of file diff --git a/src/components/oa/deleteQuestionAnswer.vue b/src/components/oa/deleteQuestionAnswer.vue new file mode 100644 index 0000000..f5611c6 --- /dev/null +++ b/src/components/oa/deleteQuestionAnswer.vue @@ -0,0 +1,77 @@ + + + + + {{ $t('questionAnswerManage.delete.confirmText') }} + + + + + + + + + \ No newline at end of file diff --git a/src/components/oa/deleteQuestionTitle.vue b/src/components/oa/deleteQuestionTitle.vue new file mode 100644 index 0000000..4be1ed3 --- /dev/null +++ b/src/components/oa/deleteQuestionTitle.vue @@ -0,0 +1,81 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/components/oa/editNotepad.vue b/src/components/oa/editNotepad.vue new file mode 100644 index 0000000..de43fb9 --- /dev/null +++ b/src/components/oa/editNotepad.vue @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + + + + + + + {{ $t('common.cancel') }} + {{ $t('common.save') }} + + + + + \ No newline at end of file diff --git a/src/components/oa/editQuestionAnswer.vue b/src/components/oa/editQuestionAnswer.vue new file mode 100644 index 0000000..23c7f31 --- /dev/null +++ b/src/components/oa/editQuestionAnswer.vue @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/components/oa/editQuestionTitle.vue b/src/components/oa/editQuestionTitle.vue new file mode 100644 index 0000000..a449617 --- /dev/null +++ b/src/components/oa/editQuestionTitle.vue @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + {{ $t('questionTitle.edit.addOption') }} + + + {{ $t('questionTitle.edit.removeOption') }} + + + + + + + + + + + + \ No newline at end of file diff --git a/src/components/oa/notepadDetail.vue b/src/components/oa/notepadDetail.vue new file mode 100644 index 0000000..18bf3e4 --- /dev/null +++ b/src/components/oa/notepadDetail.vue @@ -0,0 +1,103 @@ + + + + + + + + + + + {{ $t('common.delete') }} + + + + + + + + \ No newline at end of file diff --git a/src/components/oa/notepadOwnerRepair.vue b/src/components/oa/notepadOwnerRepair.vue new file mode 100644 index 0000000..4ad9f0e --- /dev/null +++ b/src/components/oa/notepadOwnerRepair.vue @@ -0,0 +1,202 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + {{ $t('common.cancel') }} + {{ $t('common.submit') }} + + + + + \ No newline at end of file diff --git a/src/components/oa/publishQuestionAnswer.vue b/src/components/oa/publishQuestionAnswer.vue new file mode 100644 index 0000000..2793a56 --- /dev/null +++ b/src/components/oa/publishQuestionAnswer.vue @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/components/oa/uploadImageUrl.vue b/src/components/oa/uploadImageUrl.vue new file mode 100644 index 0000000..c13f01d --- /dev/null +++ b/src/components/oa/uploadImageUrl.vue @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/components/room/selectRooms.vue b/src/components/room/selectRooms.vue new file mode 100644 index 0000000..06c5c0b --- /dev/null +++ b/src/components/room/selectRooms.vue @@ -0,0 +1,162 @@ + + + + + {{ $t('selectRoom.buildingUnit') }} + + + + + + + + {{ $t('selectRoom.roomInfo') }} + + + + + + {{ item.floorNum }}-{{ item.unitNum }}-{{ item.roomNum }}({{ item.stateName }}) + + + + + + + + + + + \ No newline at end of file diff --git a/src/i18n/oaI18n.js b/src/i18n/oaI18n.js index c2ec8bb..c42c9e5 100644 --- a/src/i18n/oaI18n.js +++ b/src/i18n/oaI18n.js @@ -9,7 +9,14 @@ import { messages as addComplaintTypeMessages } from '../views/oa/addComplaintTy import { messages as editComplaintTypeMessages } from '../views/oa/editComplaintTypeLang' import { messages as addComplaintMessages } from '../views/oa/addComplaintLang' import { messages as complaintMessages } from '../views/oa/complaintLang' - +import { messages as notepadManageMessages } from '../views/oa/notepadManageLang' +import { messages as visitManageMessages } from '../views/oa/visitManageLang' +import { messages as questionTitleMessages } from '../views/oa/questionTitleLang' +import { messages as questionAnswerManageMessages } from '../views/oa/questionAnswerManageLang' +import { messages as printQuestionAnswerMessages } from '../views/oa/printQuestionAnswerLang' +import { messages as addQuestionAnswerMessages } from '../views/oa/addQuestionAnswerLang' +import { messages as editQuestionAnswerMessages } from '../views/oa/editQuestionAnswerLang' +import { messages as printQuestionAnswerDetailMessages } from '../views/oa/printQuestionAnswerDetailLang' export const messages ={ en:{ ...activitiesTypeManageMessages.en, @@ -23,6 +30,14 @@ export const messages ={ ...editComplaintTypeMessages.en, ...addComplaintMessages.en, ...complaintMessages.en, + ...notepadManageMessages.en, + ...visitManageMessages.en, + ...questionTitleMessages.en, + ...questionAnswerManageMessages.en, + ...printQuestionAnswerMessages.en, + ...addQuestionAnswerMessages.en, + ...editQuestionAnswerMessages.en, + ...printQuestionAnswerDetailMessages.en, }, zh:{ ...activitiesTypeManageMessages.zh, @@ -36,5 +51,13 @@ export const messages ={ ...editComplaintTypeMessages.zh, ...addComplaintMessages.zh, ...complaintMessages.zh, + ...notepadManageMessages.zh, + ...visitManageMessages.zh, + ...questionTitleMessages.zh, + ...questionAnswerManageMessages.zh, + ...printQuestionAnswerMessages.zh, + ...addQuestionAnswerMessages.zh, + ...editQuestionAnswerMessages.zh, + ...printQuestionAnswerDetailMessages.zh, } } \ No newline at end of file diff --git a/src/router/index.js b/src/router/index.js index 4b954f2..c6172a6 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -330,7 +330,7 @@ const routes = [ name: '/views/work/adminRepairDetail', component: () => import('@/views/work/adminRepairDetailList.vue') }, - + { path: '/pages/complaint/adminComplaint', name: '/pages/complaint/adminComplaint', @@ -361,7 +361,7 @@ const routes = [ name: '/pages/iot/adminBarrier', component: () => import('@/views/iot/adminBarrierList.vue') }, - + { path: '/pages/iot/adminMeter', name: '/pages/iot/adminMeter', @@ -822,7 +822,7 @@ const routes = [ name: '/pages/property/repairForceFinishManage', component: () => import('@/views/work/repairForceFinishManageList.vue') }, - + { path: '/pages/resource/resourceAuditFlow', name: '/pages/resource/resourceAuditFlow', @@ -843,7 +843,7 @@ const routes = [ name: '/pages/common/resourceStoreManage', component: () => import('@/views/resource/resourceStoreManageList.vue') }, - + { path: '/pages/property/resourceSupplierManage', name: '/pages/property/resourceSupplierManage', @@ -924,7 +924,7 @@ const routes = [ name: '/pages/property/locationManage', component: () => import('@/views/community/locationManageList.vue') }, - + ...inspectionRouter, ...machineRouter, ...oaRouter, @@ -945,6 +945,16 @@ const routes = [ name: '/views/resource/printEquipmentAccountLabel', component: printEquipmentAccountLabel }, + { + path: '/pages/question/printQuestionAnswer', + name: '/pages/question/printQuestionAnswer', + component: () => import('@/views/oa/printQuestionAnswerList.vue') + }, + { + path: '/pages/question/printQuestionAnswerDetail', + name: '/pages/question/printQuestionAnswerDetail', + component: () => import('@/views/oa/printQuestionAnswerDetailList.vue') + }, ] const router = new VueRouter({ diff --git a/src/router/oaRouter.js b/src/router/oaRouter.js index 26b3edd..eec7a52 100644 --- a/src/router/oaRouter.js +++ b/src/router/oaRouter.js @@ -54,4 +54,35 @@ export default [ name: '/pages/complaint/complaint', component: () => import('@/views/oa/complaintList.vue') }, + { + path: '/pages/property/notepadManage', + name: '/pages/property/notepadManage', + component: () => import('@/views/oa/notepadManageList.vue') + }, + { + path: '/pages/property/visitManage', + name: '/pages/property/visitManage', + component: () => import('@/views/oa/visitManageList.vue') + }, + { + path: '/pages/question/questionTitle', + name: '/pages/question/questionTitle', + component: () => import('@/views/oa/questionTitleList.vue') + }, + { + path: '/pages/property/questionAnswerManage', + name: '/pages/property/questionAnswerManage', + component: () => import('@/views/oa/questionAnswerManageList.vue') + }, + { + path: '/views/oa/addQuestionAnswer', + name: '/views/oa/addQuestionAnswer', + component: () => import('@/views/oa/addQuestionAnswerList.vue') + }, + { + path:'/views/oa/editQuestionAnswer', + name:'/views/oa/editQuestionAnswer', + component: () => import('@/views/oa/editQuestionAnswerList.vue') + }, + ] \ No newline at end of file diff --git a/src/views/oa/addQuestionAnswerLang.js b/src/views/oa/addQuestionAnswerLang.js new file mode 100644 index 0000000..c1acd24 --- /dev/null +++ b/src/views/oa/addQuestionAnswerLang.js @@ -0,0 +1,108 @@ +export const messages = { + en: { + addQuestionAnswer: { + title: 'Add Questionnaire', + qaName: 'Questionnaire Name', + qaNamePlaceholder: 'Required, please fill in the questionnaire name', + startTime: 'Start Time', + startTimePlaceholder: 'Required, please select start time', + endTime: 'End Time', + endTimePlaceholder: 'Required, please select end time', + content: 'Questionnaire Description', + contentPlaceholder: 'Required, please enter questionnaire description', + questionTitle: 'Questionnaire Questions', + chooseTitle: 'Select Questions', + questionRoom: 'Questionnaire Rooms', + qaNameRequired: 'Questionnaire name is required', + startTimeRequired: 'Start time is required', + endTimeRequired: 'End time is required', + timeInvalid: 'End time must be later than start time', + contentRequired: 'Questionnaire description is required', + titleRequired: 'Please select at least one question', + roomRequired: 'Please select at least one room', + titleExist: 'This question has already been selected', + confirmDeleteTitle: 'Are you sure to delete this question?', + saveSuccess: 'Questionnaire saved successfully', + saveError: 'Failed to save questionnaire' + }, + questionTitle: { + name: 'Name', + type: 'Type', + options: 'Options', + operation: 'Operation', + delete: 'Delete', + createTime: 'Create Time', + singleChoice: 'Single Choice', + multipleChoice: 'Multiple Choice', + shortAnswer: 'Short Answer' + }, + selectRoom: { + buildingUnit: 'Building Unit', + roomInfo: 'Room Information', + unit: 'Unit', + loadError: 'Failed to load building units', + loadRoomError: 'Failed to load rooms' + }, + chooseQuestionTitle: { + title: 'Select Questions', + searchPlaceholder: 'Enter question name', + question: 'Question', + operation: 'Operation', + choose: 'Choose', + queryError: 'Failed to query questions' + } + }, + zh: { + addQuestionAnswer: { + title: '添加问卷', + qaName: '问卷名称', + qaNamePlaceholder: '必填,请填写问卷名称', + startTime: '开始时间', + startTimePlaceholder: '必填,请选择开始时间', + endTime: '结束时间', + endTimePlaceholder: '必填,请选择结束时间', + content: '问卷说明', + contentPlaceholder: '必填,请输入问卷说明', + questionTitle: '问卷题目', + chooseTitle: '选择题目', + questionRoom: '问卷房屋', + qaNameRequired: '问卷名称不能为空', + startTimeRequired: '开始时间不能为空', + endTimeRequired: '结束时间不能为空', + timeInvalid: '结束时间必须晚于开始时间', + contentRequired: '问卷说明不能为空', + titleRequired: '请至少选择一个题目', + roomRequired: '请至少选择一间房屋', + titleExist: '该题目已被选择', + confirmDeleteTitle: '确定删除该题目吗?', + saveSuccess: '问卷保存成功', + saveError: '问卷保存失败' + }, + questionTitle: { + name: '名称', + type: '类型', + options: '选项', + operation: '操作', + delete: '删除', + createTime: '创建时间', + singleChoice: '单选', + multipleChoice: '多选', + shortAnswer: '简答' + }, + selectRoom: { + buildingUnit: '楼栋单元', + roomInfo: '房屋信息', + unit: '单元', + loadError: '加载楼栋单元失败', + loadRoomError: '加载房屋信息失败' + }, + chooseQuestionTitle: { + title: '选择题目', + searchPlaceholder: '输入题目名称', + question: '题目', + operation: '操作', + choose: '选择', + queryError: '查询题目失败' + } + } +} \ No newline at end of file diff --git a/src/views/oa/addQuestionAnswerList.vue b/src/views/oa/addQuestionAnswerList.vue new file mode 100644 index 0000000..f248603 --- /dev/null +++ b/src/views/oa/addQuestionAnswerList.vue @@ -0,0 +1,252 @@ + + + + + {{ $t('addQuestionAnswer.title') }} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{ $t('addQuestionAnswer.questionTitle') }} + + {{ $t('addQuestionAnswer.chooseTitle') }} + + + + + + + {{ getTitleTypeName(scope.row.titleType) }} + + + + + + {{ item.seq }}、{{ item.qaValue }} + + + + + + + {{ $t('questionTitle.delete') }} + + + + + + + + + {{ $t('addQuestionAnswer.questionRoom') }} + + + + + + + + + + + + + + + {{ $t('common.save') }} + + + {{ $t('common.cancel') }} + + + + + + + + + + \ No newline at end of file diff --git a/src/views/oa/editQuestionAnswerLang.js b/src/views/oa/editQuestionAnswerLang.js new file mode 100644 index 0000000..ba23856 --- /dev/null +++ b/src/views/oa/editQuestionAnswerLang.js @@ -0,0 +1,108 @@ +export const messages = { + en: { + editQuestionAnswer: { + title: 'Edit Questionnaire', + qaName: 'Questionnaire Name', + qaNamePlaceholder: 'Required, please enter questionnaire name', + startTime: 'Start Time', + startTimePlaceholder: 'Required, please select start time', + endTime: 'End Time', + endTimePlaceholder: 'Required, please select end time', + content: 'Questionnaire Description', + contentPlaceholder: 'Required, please enter questionnaire description', + questionTitle: 'Questionnaire Questions', + chooseTitle: 'Select Questions', + questionRooms: 'Questionnaire Rooms', + household: 'households', + reselect: 'Reselect', + save: 'Save', + cancel: 'Cancel', + table: { + name: 'Name', + type: 'Type', + options: 'Options', + actions: 'Actions', + delete: 'Delete' + }, + singleChoice: 'Single Choice', + multipleChoice: 'Multiple Choice', + shortAnswer: 'Short Answer', + duplicateTitle: 'Please do not select duplicate questions', + validate: { + qaName: 'Questionnaire name cannot be empty', + startTime: 'Start time cannot be empty', + endTime: 'End time cannot be empty', + timeError: 'Start time must be earlier than end time' + }, + updateSuccess: 'Update successful', + updateFailed: 'Update failed' + }, + selectRoom: { + buildingUnit: 'Building Unit', + roomInfo: 'Room Information' + }, + chooseQuestionTitle: { + title: 'Select Questions', + searchPlaceholder: 'Enter question name', + table: { + title: 'Question', + createTime: 'Create Time', + actions: 'Actions', + choose: 'Select' + } + } + }, + zh: { + editQuestionAnswer: { + title: '修改问卷', + qaName: '问卷名称', + qaNamePlaceholder: '必填,请填写问卷名称', + startTime: '开始时间', + startTimePlaceholder: '必填,请选择开始时间', + endTime: '结束时间', + endTimePlaceholder: '必填,请选择结束时间', + content: '问卷说明', + contentPlaceholder: '必填,请输入问卷说明', + questionTitle: '问卷题目', + chooseTitle: '选择题目', + questionRooms: '问卷房屋', + household: '户', + reselect: '重新选择', + save: '保存', + cancel: '取消', + table: { + name: '名称', + type: '类型', + options: '选项', + actions: '操作', + delete: '删除' + }, + singleChoice: '单选', + multipleChoice: '多选', + shortAnswer: '简答', + duplicateTitle: '请勿重复选择题目', + validate: { + qaName: '问卷名称不能为空', + startTime: '开始时间不能为空', + endTime: '结束时间不能为空', + timeError: '开始时间必须小于结束时间' + }, + updateSuccess: '修改成功', + updateFailed: '修改失败' + }, + selectRoom: { + buildingUnit: '楼栋单元', + roomInfo: '房屋信息' + }, + chooseQuestionTitle: { + title: '选择题目', + searchPlaceholder: '输入题目名称', + table: { + title: '题目', + createTime: '创建时间', + actions: '操作', + choose: '选择' + } + } + } +} \ No newline at end of file diff --git a/src/views/oa/editQuestionAnswerList.vue b/src/views/oa/editQuestionAnswerList.vue new file mode 100644 index 0000000..fad6b39 --- /dev/null +++ b/src/views/oa/editQuestionAnswerList.vue @@ -0,0 +1,270 @@ + + + + + {{ $t('editQuestionAnswer.title') }} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{ $t('editQuestionAnswer.questionTitle') }} + + + {{ $t('editQuestionAnswer.chooseTitle') }} + + + + + + + + {{ getTitleTypeName(scope.row.titleType) }} + + + + + + {{ item.seq }}、{{ item.qaValue }} + + + + + + + {{ $t('editQuestionAnswer.table.delete') }} + + + + + + + + + {{ $t('editQuestionAnswer.questionRooms') }} + + + + + + + + + + {{ editQuestionAnswerInfo.voteCount }}{{ $t('editQuestionAnswer.household') }} + + {{ $t('editQuestionAnswer.reselect') }} + + + + + + + + + + + {{ $t('editQuestionAnswer.save') }} + + + {{ $t('editQuestionAnswer.cancel') }} + + + + + + + + + + \ No newline at end of file diff --git a/src/views/oa/notepadManageLang.js b/src/views/oa/notepadManageLang.js new file mode 100644 index 0000000..3139b25 --- /dev/null +++ b/src/views/oa/notepadManageLang.js @@ -0,0 +1,192 @@ +export const messages = { + en: { + notepadManage: { + search: { + title: 'Search Conditions', + noteType: 'Please select feedback type', + roomName: 'Please select room', + state: 'Please select status', + createUserName: 'Please select registrant', + objName: 'Please select owner name' + }, + list: { + title: 'Owner Feedback' + }, + table: { + noteType: 'Type', + roomName: 'Room', + objName: 'Contact', + link: 'Contact Phone', + state: 'Status', + createTime: 'Record Time', + createUserName: 'Registrant', + title: 'Content' + }, + state: { + following: 'Following', + completed: 'Completed', + transferred: 'Transferred' + }, + operation: { + follow: 'Follow', + progress: 'Progress', + transfer: 'Transfer to Repair', + repairDetail: 'Repair Detail' + }, + tip: 'Tip: Please register at the business acceptance page', + edit: { + title: 'Edit', + roomName: 'Room', + objName: 'Contact', + link: 'Contact Phone', + noteType: 'Type', + Content: 'Content', + selectNoteType: 'Please select feedback type' + }, + delete: { + title: 'Confirm Operation', + confirm: 'Confirm to delete notepad?' + }, + addDetail: { + title: 'Follow Up', + state: 'Status', + content: 'Follow Content', + selectState: 'Please select status', + contentPlaceholder: 'Please enter follow content' + }, + detail: { + title: 'Follow Progress', + index: 'No.', + createUser: 'Handler', + createTime: 'Handle Time', + content: 'Handle Content' + }, + ownerRepair: { + title: 'Transfer to Repair', + repairType: 'Repair Type', + repairObjName: 'Room', + repairName: 'Repairer', + tel: 'Contact', + appointmentTime: 'Appointment Time', + context: 'Repair Content', + selectRepairType: 'Please select repair type', + repairObjNamePlaceholder: 'Please enter room', + repairNamePlaceholder: 'Please enter repairer', + telPlaceholder: 'Please enter contact', + selectTime: 'Select appointment time', + contextPlaceholder: 'Please enter repair content' + }, + validate: { + noteType: 'Type cannot be empty', + title: 'Content cannot be empty', + titleMaxLength: 'Content cannot exceed 256 characters', + state: 'Status cannot be empty', + content: 'Content cannot be empty', + repairType: 'Repair type cannot be empty', + repairObjName: 'Room cannot be empty', + repairName: 'Repairer cannot be empty', + repairNameLength: 'Repairer name must be between 2-10 characters', + tel: 'Contact cannot be empty', + telFormat: 'Invalid contact format', + appointmentTime: 'Appointment time cannot be empty', + context: 'Repair content cannot be empty', + contextMaxLength: 'Repair content cannot exceed 2000 characters' + } + } + }, + zh: { + notepadManage: { + search: { + title: '查询条件', + noteType: '请选择反馈类型', + roomName: '请选择房屋', + state: '请选择状态', + createUserName: '请选择登记人', + objName: '请选择业主名称' + }, + list: { + title: '业主反馈' + }, + table: { + noteType: '类型', + roomName: '房屋', + objName: '联系人', + link: '联系电话', + state: '状态', + createTime: '记录时间', + createUserName: '登记人', + title: '内容' + }, + state: { + following: '跟进中', + completed: '完成', + transferred: '已转报修单' + }, + operation: { + follow: '跟进', + progress: '进度', + transfer: '转报修单', + repairDetail: '报修详情' + }, + tip: '温馨提示:请到业务受理页面登记', + edit: { + title: '修改', + roomName: '房屋', + objName: '联系人', + link: '联系电话', + noteType: '类型', + content: '内容', + selectNoteType: '请选择反馈类型' + }, + delete: { + title: '请确认您的操作', + confirm: '确定删除记事薄?' + }, + addDetail: { + title: '跟进', + state: '状态', + content: '跟进内容', + selectState: '请选择状态', + contentPlaceholder: '请填写跟进内容' + }, + detail: { + title: '跟进进度', + index: '序号', + createUser: '处理人', + createTime: '处理时间', + content: '处理内容' + }, + ownerRepair: { + title: '转报修单', + repairType: '报修类型', + repairObjName: '房屋', + repairName: '报修人', + tel: '联系方式', + appointmentTime: '预约时间', + context: '报修内容', + selectRepairType: '请选择报修类型', + repairObjNamePlaceholder: '请填写房屋', + repairNamePlaceholder: '请填写报修人', + telPlaceholder: '请填写联系方式', + selectTime: '选择预约时间', + contextPlaceholder: '请填写报修内容' + }, + validate: { + noteType: '类型不能为空', + title: '内容不能为空', + titleMaxLength: '内容不能超过256个字符', + state: '状态不能为空', + content: '内容不能为空', + repairType: '报修类型不能为空', + repairObjName: '房屋不能为空', + repairName: '报修人不能为空', + repairNameLength: '报修人名称必须在2至10字符之间', + tel: '联系方式不能为空', + telFormat: '联系方式格式不正确', + appointmentTime: '预约时间不能为空', + context: '报修内容不能为空', + contextMaxLength: '报修内容不能超过2000个字符' + } + } + } +} \ No newline at end of file diff --git a/src/views/oa/notepadManageList.vue b/src/views/oa/notepadManageList.vue new file mode 100644 index 0000000..3f0b7b4 --- /dev/null +++ b/src/views/oa/notepadManageList.vue @@ -0,0 +1,265 @@ + + + + + + {{ $t('notepadManage.search.title') }} + + {{ notepadManageInfo.moreCondition ? $t('common.hide') : $t('common.more') }} + + + + + + + + + + + + + + + + + + + + + + + {{ $t('common.search') }} + + + + {{ $t('common.reset') }} + + + + + + + + + + + + + + + + + + {{ $t('notepadManage.list.title') }} + + + + + + + + + + {{ scope.row.state === 'F' ? $t('notepadManage.state.completed') : $t('notepadManage.state.following') }} + ({{ $t('notepadManage.state.transferred') }}) + + + + + + + + + {{ $t('notepadManage.operation.follow') }} + + + {{ $t('notepadManage.operation.progress') }} + + + {{ $t('notepadManage.operation.transfer') }} + + + {{ $t('notepadManage.operation.repairDetail') }} + + + {{ $t('common.edit') }} + + + {{ $t('common.delete') }} + + + + + + + {{ $t('notepadManage.tip') }} + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/views/oa/printQuestionAnswerDetailLang.js b/src/views/oa/printQuestionAnswerDetailLang.js new file mode 100644 index 0000000..9ab69de --- /dev/null +++ b/src/views/oa/printQuestionAnswerDetailLang.js @@ -0,0 +1,38 @@ +export const messages = { + en: { + printQuestionAnswerDetail: { + table: { + title: 'Title', + type: 'Type', + options: 'Options', + choices: 'Choices' + }, + singleChoice: 'Single Choice', + multipleChoice: 'Multiple Choice', + shortAnswer: 'Short Answer', + total: 'Total', + submitted: 'Submitted', + people: 'people', + print: 'Print', + cancel: 'Cancel' + } + }, + zh: { + printQuestionAnswerDetail: { + table: { + title: '名称', + type: '类型', + options: '选项', + choices: '选择' + }, + singleChoice: '单选', + multipleChoice: '多选', + shortAnswer: '简答', + total: '总数', + submitted: '已提交', + people: '人', + print: '打印', + cancel: '取消' + } + } +} \ No newline at end of file diff --git a/src/views/oa/printQuestionAnswerDetailList.vue b/src/views/oa/printQuestionAnswerDetailList.vue new file mode 100644 index 0000000..5bf1d7a --- /dev/null +++ b/src/views/oa/printQuestionAnswerDetailList.vue @@ -0,0 +1,269 @@ + + + + + + + + {{ item.roomName }} + + + + + + + {{ printQuestionAnswerDetailInfo.qaName }} + + + + + + + + {{ scope.row.qaTitle }} + + + + + + {{ _getTitleTypeName(scope.row.titleType) }} + + + + + + {{ item.seq }}、{{ item.qaValue }} + + + + + + + {{ _getChooseValue(item) }} + + + + + + + {{ $t('printQuestionAnswerDetail.total') }}:{{ printQuestionAnswerDetailInfo.voteCount }}; + {{ $t('printQuestionAnswerDetail.submitted') }}:{{ printQuestionAnswerDetailInfo.votedCount }}; + + {{ item.qaValue }}: {{ item.personCount }}{{ $t('printQuestionAnswerDetail.people') }}; + + + + + {{ currentCommunity.name }} + + + {{ currentDate }} + + + + + + + {{ $t('printQuestionAnswerDetail.print') }} + + + + {{ $t('printQuestionAnswerDetail.cancel') }} + + + + + + + + \ No newline at end of file diff --git a/src/views/oa/printQuestionAnswerLang.js b/src/views/oa/printQuestionAnswerLang.js new file mode 100644 index 0000000..11eff34 --- /dev/null +++ b/src/views/oa/printQuestionAnswerLang.js @@ -0,0 +1,46 @@ +export const messages = { + en: { + printQuestionAnswer: { + table: { + name: 'Name', + type: 'Type', + options: 'Options', + selectCount: 'Select Count' + }, + type: { + single: 'Single Choice', + multiple: 'Multiple Choice', + shortAnswer: 'Short Answer' + }, + label: { + total: 'Total', + submitted: 'Submitted' + }, + unit: { + person: 'person(s)' + } + } + }, + zh: { + printQuestionAnswer: { + table: { + name: '名称', + type: '类型', + options: '选项', + selectCount: '选择人数' + }, + type: { + single: '单选', + multiple: '多选', + shortAnswer: '简答' + }, + label: { + total: '总数', + submitted: '已提交' + }, + unit: { + person: '人' + } + } + } +} \ No newline at end of file diff --git a/src/views/oa/printQuestionAnswerList.vue b/src/views/oa/printQuestionAnswerList.vue new file mode 100644 index 0000000..af7217b --- /dev/null +++ b/src/views/oa/printQuestionAnswerList.vue @@ -0,0 +1,184 @@ + + + + + {{ printQuestionAnswerInfo.qaName }} + + + + + + + + {{ row.qaTitle }} + + + + + + {{ _getTitleTypeName(row.titleType) }} + + + + + + {{ item.seq }}、{{ item.qaValue }} + + + + + + + {{ item.personCount }} {{ $t('printQuestionAnswer.unit.person') }} + + + + + + + {{ $t('printQuestionAnswer.label.total') }}:{{ printQuestionAnswerInfo.voteCount }}; + {{ $t('printQuestionAnswer.label.submitted') }}:{{ printQuestionAnswerInfo.votedCount }}; + + {{ item.qaValue }}: {{ item.personCount }}{{ $t('printQuestionAnswer.unit.person') }}; + + + + + {{ currentCommunity.name }} + + + {{ dateFormat(new Date()) }} + + + + + {{ $t('common.print') }} + + + + {{ $t('common.cancel') }} + + + + + + + + + \ No newline at end of file diff --git a/src/views/oa/questionAnswerManageLang.js b/src/views/oa/questionAnswerManageLang.js new file mode 100644 index 0000000..93f40d9 --- /dev/null +++ b/src/views/oa/questionAnswerManageLang.js @@ -0,0 +1,180 @@ +export const messages = { + en: { + questionAnswerManage: { + search: { + title: 'Search Conditions', + qaName: 'Please enter questionnaire name' + }, + list: { + title: 'Questionnaire Survey' + }, + table: { + qaName: 'Questionnaire Name', + validity: 'Validity Period', + voteCount: 'Total/Completed', + score: 'Score', + state: 'Status', + createTime: 'Create Time' + }, + state: { + published: 'Published', + unpublished: 'Unpublished' + }, + button: { + result: 'Result', + detail: 'Detail', + publish: 'Publish' + }, + edit: { + title: 'Edit Questionnaire', + qaType: 'Questionnaire Type', + qaTypePlaceholder: 'Required, please select questionnaire type', + qaType1: 'Owner Questionnaire', + qaType3: 'Owner Voting', + qaType4: 'Staff Voting', + qaName: 'Name', + qaNamePlaceholder: 'Required, please enter name', + startTime: 'Start Time', + startTimePlaceholder: 'Required, please enter start time', + endTime: 'End Time', + endTimePlaceholder: 'Required, please enter end time', + content: 'Content', + contentPlaceholder: 'Optional, please enter content', + remark: 'Remark', + remarkPlaceholder: 'Optional, please enter remark', + photos: 'Photos' + }, + delete: { + title: 'Confirm Operation', + confirmText: 'Are you sure to delete this questionnaire?' + }, + publish: { + title: 'Publish Questionnaire', + qaName: 'Name', + tip: 'Reminder', + tipText: 'After publishing, it cannot be modified again. Please confirm before publishing!', + notifyWay: 'Notification Method', + notifyWayPlaceholder: 'Required, please select notification method', + notifyWay1: 'SMS', + notifyWay2: 'WeChat Message', + notifyWay3: 'No Notification', + button: 'Publish' + }, + validate: { + qaType: 'Questionnaire type is required', + qaName: 'Questionnaire name is required', + qaNameMax: 'Questionnaire name is too long', + startTime: 'Start time is required', + endTime: 'End time is required', + notifyWay: 'Notification method is required' + }, + message: { + updateSuccess: 'Update successfully', + updateError: 'Update failed', + deleteSuccess: 'Delete successfully', + deleteError: 'Delete failed', + publishSuccess: 'Publish successfully', + publishError: 'Publish failed', + fetchError: 'Failed to fetch data' + } + }, + uploadImage: { + validate: { + imageType: 'Only image files are allowed', + imageSize: 'Image size cannot exceed 2MB' + }, + message: { + uploadError: 'Image upload failed' + } + } + }, + zh: { + questionAnswerManage: { + search: { + title: '查询条件', + qaName: '请输入问卷名称' + }, + list: { + title: '问卷调研' + }, + table: { + qaName: '问卷名称', + validity: '有效期', + voteCount: '总问卷/已问卷', + score: '得分', + state: '状态', + createTime: '创建时间' + }, + state: { + published: '已发布', + unpublished: '待发布' + }, + button: { + result: '结果', + detail: '明细', + publish: '发布' + }, + edit: { + title: '修改问卷信息', + qaType: '问卷类型', + qaTypePlaceholder: '必填,请选择问卷类型', + qaType1: '业主问卷', + qaType3: '业主投票', + qaType4: '员工投票', + qaName: '名称', + qaNamePlaceholder: '必填,请填写名称', + startTime: '开始时间', + startTimePlaceholder: '必填,请填写开始时间', + endTime: '结束时间', + endTimePlaceholder: '必填,请填写结束时间', + content: '内容', + contentPlaceholder: '选填,请填写内容', + remark: '备注', + remarkPlaceholder: '选填,请填写备注', + photos: '图片' + }, + delete: { + title: '请确认您的操作', + confirmText: '确定删除问卷信息' + }, + publish: { + title: '发布', + qaName: '名称', + tip: '温馨提示', + tipText: '发布后将无法再次修改,请确认无误后再发布!', + notifyWay: '通知方式', + notifyWayPlaceholder: '必填,请选择通知方式', + notifyWay1: '短信', + notifyWay2: '微信消息', + notifyWay3: '不通知', + button: '发布' + }, + validate: { + qaType: '问卷类型不能为空', + qaName: '问卷名称不能为空', + qaNameMax: '问卷名称太长', + startTime: '开始时间不能为空', + endTime: '结束时间不能为空', + notifyWay: '通知方式不能为空' + }, + message: { + updateSuccess: '修改成功', + updateError: '修改失败', + deleteSuccess: '删除成功', + deleteError: '删除失败', + publishSuccess: '发布成功', + publishError: '发布失败', + fetchError: '获取数据失败' + } + }, + uploadImage: { + validate: { + imageType: '只能上传图片文件', + imageSize: '图片大小不能超过2MB' + }, + message: { + uploadError: '图片上传失败' + } + } + } +} \ No newline at end of file diff --git a/src/views/oa/questionAnswerManageList.vue b/src/views/oa/questionAnswerManageList.vue new file mode 100644 index 0000000..2c05a27 --- /dev/null +++ b/src/views/oa/questionAnswerManageList.vue @@ -0,0 +1,199 @@ + + + + + + {{ $t('questionAnswerManage.search.title') }} + + + + + + + + + {{ $t('common.search') }} + + + + {{ $t('common.reset') }} + + + + + + + + + {{ $t('questionAnswerManage.list.title') }} + + + {{ $t('common.add') }} + + + + + + + + {{ scope.row.startTime }} + {{ scope.row.endTime }} + + + + + {{ scope.row.voteCount }}/{{ scope.row.votedCount }} + + + + + + {{ scope.row.state === 'C' ? $t('questionAnswerManage.state.published') : + $t('questionAnswerManage.state.unpublished') }} + + + + + + + {{ $t('questionAnswerManage.button.result') }} + + + {{ $t('questionAnswerManage.button.detail') }} + + + {{ $t('questionAnswerManage.button.publish') }} + + + {{ $t('common.edit') }} + + + {{ $t('common.delete') }} + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/views/oa/questionTitleLang.js b/src/views/oa/questionTitleLang.js new file mode 100644 index 0000000..c52259d --- /dev/null +++ b/src/views/oa/questionTitleLang.js @@ -0,0 +1,136 @@ +export const messages = { + en: { + questionTitle: { + search: { + title: 'Search Conditions', + itemTitlePlaceholder: 'Please enter question name', + titleTypePlaceholder: 'Please select question type', + pleaseSelect: 'Please select', + singleChoice: 'Single Choice', + multipleChoice: 'Multiple Choice', + shortAnswer: 'Short Answer' + }, + list: { + title: 'Questionnaire Questions' + }, + table: { + name: 'Name', + type: 'Type', + options: 'Options', + createTime: 'Create Time' + }, + types: { + singleChoice: 'Single Choice', + multipleChoice: 'Multiple Choice', + shortAnswer: 'Short Answer' + }, + add: { + title: 'Add Question', + name: 'Name', + namePlaceholder: 'Required, please fill in the name', + nameRequired: 'Name cannot be empty', + nameTooLong: 'Name is too long', + type: 'Type', + typePlaceholder: 'Required, please select type', + typeRequired: 'Type cannot be empty', + option: 'Option', + optionPlaceholder: 'Required, please fill in the option content', + optionRequired: 'Option content cannot be empty', + addOption: 'Add Option', + removeOption: 'Remove Option', + pleaseSelect: 'Please select', + success: 'Added successfully' + }, + edit: { + title: 'Edit Question', + name: 'Name', + namePlaceholder: 'Required, please fill in the name', + nameRequired: 'Name cannot be empty', + nameTooLong: 'Name is too long', + type: 'Type', + typePlaceholder: 'Required, please select type', + typeRequired: 'Type cannot be empty', + option: 'Option', + optionPlaceholder: 'Required, please fill in the option content', + optionRequired: 'Option content cannot be empty', + addOption: 'Add Option', + removeOption: 'Remove Option', + pleaseSelect: 'Please select', + success: 'Updated successfully' + }, + delete: { + title: 'Confirm Operation', + confirmMessage: 'Are you sure to delete this question?', + success: 'Deleted successfully' + }, + fetchError: 'Failed to fetch question data' + } + }, + zh: { + questionTitle: { + search: { + title: '查询条件', + itemTitlePlaceholder: '请输入问题名称', + titleTypePlaceholder: '请选择题目类型', + pleaseSelect: '请选择', + singleChoice: '单选', + multipleChoice: '多选', + shortAnswer: '简答' + }, + list: { + title: '问卷题目' + }, + table: { + name: '名称', + type: '类型', + options: '选项', + createTime: '创建时间' + }, + types: { + singleChoice: '单选', + multipleChoice: '多选', + shortAnswer: '简答' + }, + add: { + title: '添加题目', + name: '名称', + namePlaceholder: '必填,请填写名称', + nameRequired: '名称不能为空', + nameTooLong: '名称太长', + type: '类型', + typePlaceholder: '必填,请选择类型', + typeRequired: '类型不能为空', + option: '选项', + optionPlaceholder: '必填,请填写选项内容', + optionRequired: '选项内容不能为空', + addOption: '增加选项', + removeOption: '删除选项', + pleaseSelect: '请选择', + success: '添加成功' + }, + edit: { + title: '修改题目', + name: '名称', + namePlaceholder: '必填,请填写名称', + nameRequired: '名称不能为空', + nameTooLong: '名称太长', + type: '类型', + typePlaceholder: '必填,请选择类型', + typeRequired: '类型不能为空', + option: '选项', + optionPlaceholder: '必填,请填写选项内容', + optionRequired: '选项内容不能为空', + addOption: '增加选项', + removeOption: '删除选项', + pleaseSelect: '请选择', + success: '修改成功' + }, + delete: { + title: '确认操作', + confirmMessage: '确定删除该题目吗?', + success: '删除成功' + }, + fetchError: '获取题目数据失败' + } + } +} \ No newline at end of file diff --git a/src/views/oa/questionTitleList.vue b/src/views/oa/questionTitleList.vue new file mode 100644 index 0000000..88d4756 --- /dev/null +++ b/src/views/oa/questionTitleList.vue @@ -0,0 +1,210 @@ + + + + + + {{ $t('questionTitle.search.title') }} + + + + + + + + + + + + + + + + + {{ $t('common.search') }} + + + + {{ $t('common.reset') }} + + + + + + + + + {{ $t('questionTitle.list.title') }} + + + {{ $t('common.add') }} + + + + + + + + {{ getTitleTypeName(scope.row.titleType) }} + + + + + + {{ item.seq }}、{{ item.qaValue }} + + + + + + + + {{ $t('common.edit') }} + + + {{ $t('common.delete') }} + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/views/oa/visitManageLang.js b/src/views/oa/visitManageLang.js new file mode 100644 index 0000000..90303f3 --- /dev/null +++ b/src/views/oa/visitManageLang.js @@ -0,0 +1,82 @@ +export const messages = { + en: { + visitManage: { + search: { + title: 'Search Conditions', + state: 'Select Audit Status', + nameLike: 'Please enter visitor name', + gender: 'Select Gender', + phoneNumber: 'Please enter phone number', + roomName: 'Please enter building-unit-room', + ownerName: 'Please enter owner name', + startTime: 'Please enter start time', + endTime: 'Please enter end time' + }, + list: { + title: 'Visitor List' + }, + table: { + visitId: 'Visit ID', + name: 'Name', + gender: 'Gender', + phoneNumber: 'Phone Number', + roomName: 'Visit Room', + ownerName: 'Visit Owner', + carNum: 'Visitor Car', + visitType: 'Visit Type', + visitCase: 'Visit Reason', + visitTime: 'Visit Time', + departureTime: 'Departure Time', + state: 'Audit Status', + msg: 'Audit Remark', + createTime: 'Create Time' + }, + gender: { + male: 'Male', + female: 'Female' + }, + visitType: 'Visit Type', + manage: 'Manage' + }, + }, + zh: { + visitManage: { + search: { + title: '查询条件', + state: '请选择审核状态', + nameLike: '请输入访客姓名', + gender: '请选择性别', + phoneNumber: '请输入电话号码', + roomName: '请输入拜访房屋 楼栋-单元-房屋', + ownerName: '请输入拜访业主', + startTime: '请输入开始时间', + endTime: '请输入结束时间' + }, + list: { + title: '访客人员' + }, + table: { + visitId: '拜访ID', + name: '姓名', + gender: '性别', + phoneNumber: '电话号码', + roomName: '拜访房屋', + ownerName: '拜访业主', + carNum: '访客车辆', + visitType: '访客类型', + visitCase: '拜访事由', + visitTime: '拜访时间', + departureTime: '离开时间', + state: '审核状态', + msg: '审核备注', + createTime: '创建时间' + }, + gender: { + male: '男', + female: '女' + }, + visitType: '访客类型', + manage: '管理' + }, + } +} \ No newline at end of file diff --git a/src/views/oa/visitManageList.vue b/src/views/oa/visitManageList.vue new file mode 100644 index 0000000..500c7df --- /dev/null +++ b/src/views/oa/visitManageList.vue @@ -0,0 +1,341 @@ + + + + + + + + {{ item.name }} + + + + + + + + {{ $t('visitManage.search.title') }} + + + + + + + + + + + + + + + + + + + + + + + + {{ $t('common.search') }} + {{ $t('common.reset') }} + + + + + + + + + + + + + + + + + + {{ $t('visitManage.list.title') }} + + {{ $t('visitManage.manage') }} + + + + + + + + {{ scope.row.visitGender === '0' ? $t('visitManage.gender.male') : $t('visitManage.gender.female') }} + + + + + + + {{ scope.row.ownerName || '-' }} + + + + + {{ scope.row.carNum || '-' }} + + + + + + {{ scope.row.visitCase || '-' }} + + + + + {{ scope.row.visitTime || '-' }} + + + + + {{ scope.row.departureTime || '-' }} + + + + + + {{ scope.row.msg || '-' }} + + + + + + {{ $t('common.detail') }} + + + + + + + + + + + + + \ No newline at end of file -- libgit2 0.21.4
{{ $t('notepadManage.delete.confirm') }}