+
+ {{ staff.name }}
+
-
-
-
-
-
{{ $t('selectStaff.staffInfo') }}
-
-
-
-
-
{{ staff.name }}
-
{{ staff.tel }}
-
-
-
-
-
-
-
{{ $t('selectStaff.selectedStaff') }}
-
-
-
- {{ staff.name }}
-
-
-
-
-
-
-
-
+}
+
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/src/i18n/oaI18n.js b/src/i18n/oaI18n.js
index f79efd9..c2ec8bb 100644
--- a/src/i18n/oaI18n.js
+++ b/src/i18n/oaI18n.js
@@ -4,6 +4,12 @@ import { messages as noticeManageMessages } from '../views/oa/noticeManageLang'
import { messages as addNoticeViewMessages } from '../views/oa/addNoticeViewLang'
import { messages as editNoticeViewMessages } from '../views/oa/editNoticeViewLang'
import { messages as noticeDetailMessages } from '../views/oa/noticeDetailLang'
+import { messages as complaintTypeMessages } from '../views/oa/complaintTypeLang'
+import { messages as addComplaintTypeMessages } from '../views/oa/addComplaintTypeLang'
+import { messages as editComplaintTypeMessages } from '../views/oa/editComplaintTypeLang'
+import { messages as addComplaintMessages } from '../views/oa/addComplaintLang'
+import { messages as complaintMessages } from '../views/oa/complaintLang'
+
export const messages ={
en:{
...activitiesTypeManageMessages.en,
@@ -12,6 +18,11 @@ export const messages ={
...addNoticeViewMessages.en,
...editNoticeViewMessages.en,
...noticeDetailMessages.en,
+ ...complaintTypeMessages.en,
+ ...addComplaintTypeMessages.en,
+ ...editComplaintTypeMessages.en,
+ ...addComplaintMessages.en,
+ ...complaintMessages.en,
},
zh:{
...activitiesTypeManageMessages.zh,
@@ -20,5 +31,10 @@ export const messages ={
...addNoticeViewMessages.zh,
...editNoticeViewMessages.zh,
...noticeDetailMessages.zh,
+ ...complaintTypeMessages.zh,
+ ...addComplaintTypeMessages.zh,
+ ...editComplaintTypeMessages.zh,
+ ...addComplaintMessages.zh,
+ ...complaintMessages.zh,
}
}
\ No newline at end of file
diff --git a/src/router/oaRouter.js b/src/router/oaRouter.js
index 1777b6a..26b3edd 100644
--- a/src/router/oaRouter.js
+++ b/src/router/oaRouter.js
@@ -29,4 +29,29 @@ export default [
name: '/views/oa/noticeDetail',
component: () => import('@/views/oa/noticeDetailList.vue')
},
+ {
+ path: '/pages/complaint/complaintType',
+ name: '/pages/complaint/complaintType',
+ component: () => import('@/views/oa/complaintTypeList.vue')
+ },
+ {
+ path: '/views/oa/addComplaintType',
+ name: '/views/oa/addComplaintType',
+ component: () => import('@/views/oa/addComplaintTypeList.vue')
+ },
+ {
+ path: '/views/oa/editComplaintType',
+ name: '/views/oa/editComplaintType',
+ component: () => import('@/views/oa/editComplaintTypeList.vue')
+ },
+ {
+ path: '/views/oa/addComplaint',
+ name: '/views/oa/addComplaint',
+ component: () => import('@/views/oa/addComplaintList.vue')
+ },
+ {
+ path: '/pages/complaint/complaint',
+ name: '/pages/complaint/complaint',
+ component: () => import('@/views/oa/complaintList.vue')
+ },
]
\ No newline at end of file
diff --git a/src/views/oa/addComplaintLang.js b/src/views/oa/addComplaintLang.js
new file mode 100644
index 0000000..04268cb
--- /dev/null
+++ b/src/views/oa/addComplaintLang.js
@@ -0,0 +1,54 @@
+export const messages = {
+ en: {
+ addComplaint: {
+ title: 'Register Complaint',
+ type: 'Type',
+ typePlaceholder: 'Required, please select type',
+ room: 'Room',
+ roomPlaceholder: 'Required, please select room',
+ contact: 'Contact Person',
+ contactPlaceholder: 'Required, please enter contact person',
+ phone: 'Phone Number',
+ phonePlaceholder: 'Required, please enter phone number',
+ content: 'Content',
+ contentPlaceholder: 'Required, please enter content',
+ register: 'Register',
+ typeRequired: 'Complaint type is required',
+ contactRequired: 'Contact person is required',
+ contactMaxLength: 'Contact person cannot exceed 200 characters',
+ phoneRequired: 'Phone number is required',
+ phoneFormat: 'Invalid phone number format',
+ contentRequired: 'Content is required',
+ contentMaxLength: 'Content cannot exceed 4000 characters',
+ saveSuccess: 'Complaint registered successfully',
+ saveError: 'Failed to register complaint',
+ fetchTypesError: 'Failed to fetch complaint types'
+ }
+ },
+ zh: {
+ addComplaint: {
+ title: '登记投诉',
+ type: '类型',
+ typePlaceholder: '必填,请选择类型',
+ room: '房屋',
+ roomPlaceholder: '必填,请选择房屋',
+ contact: '联系人',
+ contactPlaceholder: '必填,请填写联系人',
+ phone: '联系电话',
+ phonePlaceholder: '必填,请填写联系电话',
+ content: '内容',
+ contentPlaceholder: '必填,请填写内容',
+ register: '登记',
+ typeRequired: '投诉类型不能为空',
+ contactRequired: '联系人不能为空',
+ contactMaxLength: '联系人不能大于200位',
+ phoneRequired: '联系电话不能为空',
+ phoneFormat: '联系电话格式错误',
+ contentRequired: '内容不能为空',
+ contentMaxLength: '内容超过4000位',
+ saveSuccess: '添加成功',
+ saveError: '添加失败',
+ fetchTypesError: '获取投诉类型失败'
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/views/oa/addComplaintList.vue b/src/views/oa/addComplaintList.vue
new file mode 100644
index 0000000..4f7f8ca
--- /dev/null
+++ b/src/views/oa/addComplaintList.vue
@@ -0,0 +1,149 @@
+
+
+
+
+ {{ $t('addComplaint.title') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('addComplaint.register') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common.back') }}
+ {{ $t('addComplaint.register') }}
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/oa/addComplaintTypeLang.js b/src/views/oa/addComplaintTypeLang.js
new file mode 100644
index 0000000..f553580
--- /dev/null
+++ b/src/views/oa/addComplaintTypeLang.js
@@ -0,0 +1,52 @@
+export const messages = {
+ en: {
+ addComplaintType: {
+ title: 'Add Complaint Type',
+ typeName: 'Type Name',
+ typeNamePlaceholder: 'Required, please enter type name',
+ notifyWay: 'Notification Method',
+ notifyWayPlaceholder: 'Required, please select notification method',
+ appraiseReply: 'Evaluation Reply',
+ appraiseReplyPlaceholder: 'Required, please select evaluation reply',
+ remark: 'Remark',
+ remarkPlaceholder: 'Optional, please enter remark',
+ selectStaff: 'Select Staff',
+ sms: 'SMS',
+ wechat: 'WeChat',
+ workLicense: 'WeChat + Work License',
+ autoReply: 'Auto Reply',
+ manualReply: 'Manual Reply'
+ },
+ selectStaff: {
+ orgInfo: 'Organization Info',
+ staffInfo: 'Staff Info',
+ selectedStaff: 'Selected Staff',
+ noRepeatSelect: 'Do not select repeatedly'
+ }
+ },
+ zh: {
+ addComplaintType: {
+ title: '添加投诉类型',
+ typeName: '类型名称',
+ typeNamePlaceholder: '必填,请填写类型名称',
+ notifyWay: '通知方式',
+ notifyWayPlaceholder: '必填,请选择通知方式',
+ appraiseReply: '评价回复',
+ appraiseReplyPlaceholder: '必填,请选择评价回复',
+ remark: '备注',
+ remarkPlaceholder: '选填,请填写备注',
+ selectStaff: '选择员工',
+ sms: '短信',
+ wechat: '微信',
+ workLicense: '微信+员工工牌',
+ autoReply: '自动回复',
+ manualReply: '人工回复'
+ },
+ selectStaff: {
+ orgInfo: '组织信息',
+ staffInfo: '员工信息',
+ selectedStaff: '已选员工',
+ noRepeatSelect: '请勿重复选择'
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/views/oa/addComplaintTypeList.vue b/src/views/oa/addComplaintTypeList.vue
new file mode 100644
index 0000000..ff0cfc2
--- /dev/null
+++ b/src/views/oa/addComplaintTypeList.vue
@@ -0,0 +1,156 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common.save') }}
+
+
+ {{ $t('common.back') }}
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/oa/complaintLang.js b/src/views/oa/complaintLang.js
new file mode 100644
index 0000000..e806bfd
--- /dev/null
+++ b/src/views/oa/complaintLang.js
@@ -0,0 +1,158 @@
+export const messages = {
+ en: {
+ complaint: {
+ search: {
+ title: 'Search Conditions',
+ type: 'Select Type',
+ room: 'Building-Unit-Room e.g. 1-1-1',
+ contact: 'Contact Person',
+ phone: 'Contact Phone',
+ id: 'Complaint ID',
+ startTime: 'Start Time',
+ endTime: 'End Time'
+ },
+ list: {
+ title: 'Complaints & Suggestions',
+ add: 'Add Complaint'
+ },
+ status: {
+ all: 'All',
+ processing: 'Processing',
+ completed: 'Completed'
+ },
+ table: {
+ id: 'ID',
+ type: 'Type',
+ room: 'Room',
+ contact: 'Contact',
+ phone: 'Phone',
+ status: 'Status',
+ handler: 'Handler',
+ createTime: 'Create Time'
+ },
+ edit: {
+ title: 'Edit Information',
+ type: 'Type',
+ contact: 'Contact',
+ phone: 'Phone',
+ content: 'Content',
+ typePlaceholder: 'Required, please select type',
+ contactPlaceholder: 'Required, please enter contact',
+ phonePlaceholder: 'Required, please enter phone',
+ contentPlaceholder: 'Required, please enter content',
+ success: 'Edit successful'
+ },
+ delete: {
+ title: 'Confirm Operation',
+ confirm: 'Are you sure to delete this complaint?',
+ success: 'Delete successful'
+ },
+ detail: {
+ title: 'Details',
+ room: 'Room',
+ id: 'ID',
+ type: 'Type',
+ contact: 'Contact',
+ phone: 'Phone',
+ status: 'Status',
+ handler: 'Handler',
+ handlerPhone: 'Handler Phone',
+ handlerId: 'Handler ID',
+ content: 'Content',
+ photos: 'Photos',
+ serial: 'No.',
+ handleTime: 'Handle Time',
+ duration: 'Duration',
+ comment: 'Comment'
+ },
+ validate: {
+ type: 'Type is required',
+ contact: 'Contact is required',
+ contactMax: 'Contact cannot exceed 200 characters',
+ phone: 'Phone is required',
+ phoneFormat: 'Invalid phone format',
+ content: 'Content is required',
+ contentMax: 'Content cannot exceed 4000 characters'
+ },
+ fetchError: 'Failed to fetch complaints data'
+ }
+ },
+ zh: {
+ complaint: {
+ search: {
+ title: '查询条件',
+ type: '请选择类型',
+ room: '楼栋-单元-房屋 如1-1-1',
+ contact: '请输入联系人',
+ phone: '请输入联系电话',
+ id: '请输入工单编号',
+ startTime: '请选择开始时间',
+ endTime: '请选择结束时间'
+ },
+ list: {
+ title: '投诉建议',
+ add: '投诉'
+ },
+ status: {
+ all: '全部',
+ processing: '处理中',
+ completed: '处理完成'
+ },
+ table: {
+ id: '订单编号',
+ type: '类型',
+ room: '房屋',
+ contact: '联系人',
+ phone: '联系电话',
+ status: '状态',
+ handler: '处理人',
+ createTime: '创建时间'
+ },
+ edit: {
+ title: '修改信息',
+ type: '类型',
+ contact: '联系人',
+ phone: '联系电话',
+ content: '内容',
+ typePlaceholder: '必填,请选择类型',
+ contactPlaceholder: '必填,请填写联系人',
+ phonePlaceholder: '必填,请填写联系电话',
+ contentPlaceholder: '必填,请填写内容',
+ success: '修改成功'
+ },
+ delete: {
+ title: '请确认您的操作',
+ confirm: '确定删除投诉建议吗?',
+ success: '删除成功'
+ },
+ detail: {
+ title: '详情',
+ room: '房屋',
+ id: 'ID',
+ type: '类型',
+ contact: '联系人',
+ phone: '联系电话',
+ status: '状态',
+ handler: '处理人',
+ handlerPhone: '处理人电话',
+ handlerId: '处理人编号',
+ content: '内容',
+ photos: '图片',
+ serial: '序号',
+ handleTime: '处理时间',
+ duration: '耗时',
+ comment: '意见'
+ },
+ validate: {
+ type: '投诉类型不能为空',
+ contact: '投诉人不能为空',
+ contactMax: '投诉人不能大于200位',
+ phone: '投诉电话不能为空',
+ phoneFormat: '投诉电话格式错误',
+ content: '投诉内容不能为空',
+ contentMax: '投诉状态超过4000位'
+ },
+ fetchError: '获取投诉数据失败'
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/views/oa/complaintList.vue b/src/views/oa/complaintList.vue
new file mode 100644
index 0000000..9dbea57
--- /dev/null
+++ b/src/views/oa/complaintList.vue
@@ -0,0 +1,260 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('complaint.search.title') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common.search') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('complaint.list.title') }}
+
+ {{ $t('complaint.list.add') }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.staffName }}
+
+
+
+
+
+
+
+ {{ $t('common.detail') }}
+
+
+ {{ $t('common.edit') }}
+
+
+ {{ $t('common.delete') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/oa/complaintTypeLang.js b/src/views/oa/complaintTypeLang.js
new file mode 100644
index 0000000..040a46c
--- /dev/null
+++ b/src/views/oa/complaintTypeLang.js
@@ -0,0 +1,52 @@
+export const messages = {
+ en: {
+ complaintType: {
+ title: 'Complaint Type',
+ add: 'Add',
+ typeName: 'Type Name',
+ notifyWay: 'Notification Method',
+ sms: 'SMS',
+ wechat: 'WeChat',
+ wechatWorkLicense: 'WeChat + Work License',
+ appraiseReply: 'Evaluation Reply',
+ autoReply: 'Auto Reply',
+ manualReply: 'Manual Reply',
+ handler: 'Handler',
+ createTime: 'Create Time',
+ fetchError: 'Failed to fetch complaint types'
+ },
+ deleteComplaintType: {
+ confirmTitle: 'Confirm Operation',
+ confirmText: 'Are you sure to delete this complaint type?',
+ confirm: 'Confirm Delete',
+ cancel: 'Cancel',
+ success: 'Delete successfully',
+ error: 'Delete failed'
+ }
+ },
+ zh: {
+ complaintType: {
+ title: '投诉类型',
+ add: '添加',
+ typeName: '类型名称',
+ notifyWay: '通知方式',
+ sms: '短信',
+ wechat: '微信',
+ wechatWorkLicense: '微信+员工工牌',
+ appraiseReply: '评价回复',
+ autoReply: '自动回复',
+ manualReply: '人工回复',
+ handler: '处理人',
+ createTime: '创建时间',
+ fetchError: '获取投诉类型失败'
+ },
+ deleteComplaintType: {
+ confirmTitle: '请确认您的操作',
+ confirmText: '确定删除投诉类型',
+ confirm: '确认删除',
+ cancel: '点错了',
+ success: '删除成功',
+ error: '删除失败'
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/views/oa/complaintTypeList.vue b/src/views/oa/complaintTypeList.vue
new file mode 100644
index 0000000..f068b3a
--- /dev/null
+++ b/src/views/oa/complaintTypeList.vue
@@ -0,0 +1,148 @@
+
+
+
+
+ {{ $t('complaintType.title') }}
+
+ {{ $t('complaintType.add') }}
+
+
+
+
+
+
+
+
+ {{ $t('complaintType.sms') }}
+
+
+ {{ $t('complaintType.wechatWorkLicense') }}
+
+
+ {{ $t('complaintType.wechat') }}
+
+
+
+
+
+ {{ scope.row.appraiseReply === 'Y' ? $t('complaintType.autoReply') : $t('complaintType.manualReply') }}
+
+
+
+
+
+ {{ item.staffName }}
+
+
+
+
+
+
+
+ {{ $t('common.edit') }}
+
+
+ {{ $t('common.delete') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/oa/editComplaintTypeLang.js b/src/views/oa/editComplaintTypeLang.js
new file mode 100644
index 0000000..55fa180
--- /dev/null
+++ b/src/views/oa/editComplaintTypeLang.js
@@ -0,0 +1,66 @@
+export const messages = {
+ en: {
+ editComplaintType: {
+ title: 'Edit Complaint Type',
+ typeName: 'Type Name',
+ typeNamePlaceholder: 'Required, please enter type name',
+ notifyWay: 'Notification Method',
+ notifyWayPlaceholder: 'Required, please select notification method',
+ sms: 'SMS',
+ wechat: 'WeChat',
+ workLicense: 'WeChat + Work License',
+ appraiseReply: 'Evaluation Reply',
+ appraiseReplyPlaceholder: 'Required, please select evaluation reply',
+ autoReply: 'Auto Reply',
+ manualReply: 'Manual Reply',
+ remark: 'Remark',
+ remarkPlaceholder: 'Optional, please enter remark',
+ selectStaff: 'Select Staff',
+ saveSuccess: 'Save successfully',
+ saveError: 'Save failed',
+ loadError: 'Failed to load complaint type details'
+ },
+ selectStaff: {
+ orgInfo: 'Organization Information',
+ staffInfo: 'Staff Information',
+ selectedStaff: 'Selected Staff',
+ staffAlreadySelected: 'Staff already selected',
+ loadStaffError: 'Failed to load staff information'
+ },
+ orgTree: {
+ loadError: 'Failed to load organization tree'
+ }
+ },
+ zh: {
+ editComplaintType: {
+ title: '修改投诉类型',
+ typeName: '类型名称',
+ typeNamePlaceholder: '必填,请填写类型名称',
+ notifyWay: '通知方式',
+ notifyWayPlaceholder: '必填,请选择通知方式',
+ sms: '短信',
+ wechat: '微信',
+ workLicense: '微信+员工工牌',
+ appraiseReply: '评价回复',
+ appraiseReplyPlaceholder: '必填,请选择评价回复',
+ autoReply: '自动回复',
+ manualReply: '人工回复',
+ remark: '备注',
+ remarkPlaceholder: '选填,请填写备注',
+ selectStaff: '选择员工',
+ saveSuccess: '保存成功',
+ saveError: '保存失败',
+ loadError: '加载投诉类型详情失败'
+ },
+ selectStaff: {
+ orgInfo: '组织信息',
+ staffInfo: '员工信息',
+ selectedStaff: '已选员工',
+ staffAlreadySelected: '请勿重复选择',
+ loadStaffError: '加载员工信息失败'
+ },
+ orgTree: {
+ loadError: '加载组织树失败'
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/views/oa/editComplaintTypeList.vue b/src/views/oa/editComplaintTypeList.vue
new file mode 100644
index 0000000..02d79a2
--- /dev/null
+++ b/src/views/oa/editComplaintTypeList.vue
@@ -0,0 +1,163 @@
+
+
+
+ {{ $t('editComplaintType.title') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common.back') }}
+
+
+
+ {{ $t('common.save') }}
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
--
libgit2 0.21.4