Commit 2e81c59f0280bbf18c5be0fe55492e014b929520

Authored by wuxw
1 parent c0ea09a1

完成办公功能测试

src/components/editor/RichTextEditor.vue
... ... @@ -2,7 +2,7 @@
2 2 <template>
3 3 <div ref="editor" class="rich-text-editor" style="text-align: left;"></div>
4 4 </template>
5   -
  5 +
6 6 <script>
7 7 import E from 'wangeditor'
8 8 import { getHeader } from '@/utils/header'
... ... @@ -57,28 +57,53 @@ export default {
57 57 ]
58 58  
59 59 // Image upload configuration
60   - this.editor.config.uploadImgServer = '/upload/uploadFile'
  60 + this.editor.config.uploadImgServer = '/callComponent/upload/uploadFile/uploadImage'
61 61 let headers = getHeader()
62 62 this.editor.config.uploadImgHeaders = headers
63 63 this.editor.config.uploadFileName = 'uploadFile'
64 64 this.editor.config.uploadImgMaxSize = 10 * 1024 * 1024 // 10M
65 65  
66   - // Custom image upload callback
67   - this.editor.config.uploadImgHooks = {
68   - customInsert: (insertImgFn, result) => {
69   - if (result.code === 0) {
70   - const url = result.data.url || result.data.path
71   - insertImgFn(url)
72   - } else {
73   - this.$message.error(result.msg || this.$t('upload.error'))
74   - }
75   - },
76   - error: (err) => {
77   - this.$message.error(this.$t('upload.error'))
78   - console.error('Image upload error:', err)
79   - }
  66 + this.editor.config.customUploadImg = (resultFiles, insertImgFn) => {
  67 + // 创建 FormData
  68 + const formData = new FormData()
  69 + formData.append('uploadFile', resultFiles[0])
  70 + formData.append('communityId', '-1') // 添加 communityId 参数
  71 +
  72 + // 发送请求
  73 + fetch('/callComponent/upload/uploadFile/uploadImage', {
  74 + method: 'POST',
  75 + headers: headers,
  76 + body: formData
  77 + })
  78 + .then(response => response.json())
  79 + .then(result => {
  80 + console.log(result)
  81 + const url = result.url
  82 + insertImgFn(url)
  83 +
  84 + })
  85 + .catch(err => {
  86 + this.$message.error(this.$t('upload.error'))
  87 + console.error('Image upload error:', err)
  88 + })
80 89 }
81 90  
  91 + // Custom image upload callback
  92 + // this.editor.config.uploadImgHooks = {
  93 + // customInsert: (insertImgFn, result) => {
  94 + // if (result.code === 0) {
  95 + // const url = result.data.url || result.data.path
  96 + // insertImgFn(url)
  97 + // } else {
  98 + // this.$message.error(result.msg || this.$t('upload.error'))
  99 + // }
  100 + // },
  101 + // error: (err) => {
  102 + // this.$message.error(this.$t('upload.error'))
  103 + // console.error('Image upload error:', err)
  104 + // }
  105 + // }
  106 +
82 107 // Create the editor
83 108 this.editor.create()
84 109  
... ... @@ -112,7 +137,7 @@ export default {
112 137 }
113 138 }
114 139 </script>
115   -
  140 +
116 141 <style lang="scss" scoped>
117 142 .rich-text-editor {
118 143 border: 1px solid #dcdfe6;
... ...
src/components/oa/addActivitiesType.vue
1 1 <template>
2   - <el-dialog :title="$t('activitiesTypeManage.add.title')" :visible.sync="visible" width="50%" @close="handleClose">
  2 + <el-dialog :title="$t('activitiesTypeManage.add.title')" :visible.sync="visible" width="40%" @close="handleClose">
3 3 <el-form ref="form" :model="formData" :rules="rules" label-width="120px">
4 4 <el-form-item :label="$t('activitiesTypeManage.add.typeName')" prop="typeName">
5 5 <el-input v-model="formData.typeName" :placeholder="$t('activitiesTypeManage.add.typeNamePlaceholder')" />
... ...
src/components/oa/addExamineProject.vue
1 1 <template>
2   - <el-dialog
3   - :title="$t('examineProjectManage.add.title')"
4   - :visible.sync="visible"
5   - width="50%"
6   - @close="handleClose"
7   - >
8   - <el-form
9   - ref="form"
10   - :model="formData"
11   - :rules="rules"
12   - label-width="120px"
13   - label-position="right"
14   - >
15   - <el-form-item
16   - :label="$t('examineProjectManage.form.name')"
17   - prop="name"
18   - >
19   - <el-input
20   - v-model="formData.name"
21   - :placeholder="$t('examineProjectManage.form.namePlaceholder')"
22   - />
  2 + <el-dialog :title="$t('examineProjectManage.add.title')" :visible.sync="visible" width="40%" @close="handleClose">
  3 + <el-form ref="form" :model="formData" :rules="rules" label-width="120px" label-position="right" class="text-left">
  4 + <el-form-item :label="$t('examineProjectManage.form.name')" prop="name">
  5 + <el-input v-model="formData.name" :placeholder="$t('examineProjectManage.form.namePlaceholder')" />
23 6 </el-form-item>
24   - <el-form-item
25   - :label="$t('examineProjectManage.form.post')"
26   - prop="postCd"
27   - >
28   - <el-select
29   - v-model="formData.postCd"
30   - :placeholder="$t('examineProjectManage.form.postPlaceholder')"
31   - style="width:100%"
32   - >
33   - <el-option
34   - :label="$t('examineProjectManage.form.commonPost')"
35   - value="9999"
36   - />
  7 + <el-form-item :label="$t('examineProjectManage.form.post')" prop="postCd">
  8 + <el-select v-model="formData.postCd" :placeholder="$t('examineProjectManage.form.postPlaceholder')"
  9 + style="width:100%">
  10 + <el-option :label="$t('examineProjectManage.form.commonPost')" value="9999" />
37 11 </el-select>
38 12 </el-form-item>
39   - <el-form-item
40   - :label="$t('examineProjectManage.form.weight')"
41   - prop="weight"
42   - >
43   - <el-input
44   - v-model="formData.weight"
45   - :placeholder="$t('examineProjectManage.form.weightPlaceholder')"
46   - style="width:80%"
47   - >
  13 + <el-form-item :label="$t('examineProjectManage.form.weight')" prop="weight">
  14 + <el-input v-model="formData.weight" :placeholder="$t('examineProjectManage.form.weightPlaceholder')"
  15 + style="width:80%">
48 16 <template slot="append">%</template>
49 17 </el-input>
50 18 </el-form-item>
51   - <el-form-item
52   - :label="$t('examineProjectManage.form.state')"
53   - prop="state"
54   - >
55   - <el-select
56   - v-model="formData.state"
57   - :placeholder="$t('examineProjectManage.form.statePlaceholder')"
58   - style="width:100%"
59   - >
60   - <el-option
61   - :label="$t('examineProjectManage.status.enable')"
62   - value="Y"
63   - />
64   - <el-option
65   - :label="$t('examineProjectManage.status.disable')"
66   - value="N"
67   - />
  19 + <el-form-item :label="$t('examineProjectManage.form.state')" prop="state">
  20 + <el-select v-model="formData.state" :placeholder="$t('examineProjectManage.form.statePlaceholder')"
  21 + style="width:100%">
  22 + <el-option :label="$t('examineProjectManage.status.enable')" value="Y" />
  23 + <el-option :label="$t('examineProjectManage.status.disable')" value="N" />
68 24 </el-select>
69 25 </el-form-item>
70 26 </el-form>
... ...
src/components/oa/addQuestionTitle.vue
1 1 <template>
2   - <el-dialog :title="$t('questionTitle.add.title')" :visible.sync="visible" width="70%" @close="handleClose">
  2 + <el-dialog :title="$t('questionTitle.add.title')" :visible.sync="visible" width="40%" @close="handleClose">
3 3 <el-form ref="form" :model="formData" label-width="120px">
4 4 <el-form-item :label="$t('questionTitle.add.name')" prop="qaTitle" :rules="[
5 5 { required: true, message: $t('questionTitle.add.nameRequired'), trigger: 'blur' },
... ...
src/components/oa/complaintDetail.vue
1 1 <template>
2   - <el-dialog :title="`${form.typeCdName} ${$t('complaint.detail.title')}`" :visible.sync="visible" width="70%" top="5vh">
  2 + <el-dialog :title="`${form.typeName} ${$t('complaint.detail.title')}`" :visible.sync="visible" width="70%"
  3 + top="5vh">
3 4 <el-form label-width="120px">
4 5 <el-row :gutter="20">
5 6 <el-col :span="12">
... ... @@ -17,7 +18,7 @@
17 18 <el-row :gutter="20">
18 19 <el-col :span="12">
19 20 <el-form-item :label="$t('complaint.detail.type')">
20   - <el-input v-model="form.typeCdName" readonly />
  21 + <el-input v-model="form.typeName" readonly />
21 22 </el-form-item>
22 23 </el-col>
23 24 <el-col :span="12">
... ... @@ -58,7 +59,7 @@
58 59 </el-form-item>
59 60 </template>
60 61  
61   - <el-form-item :label="`${form.typeCdName}${$t('complaint.detail.content')}`">
  62 + <el-form-item :label="`${$t('complaint.detail.content')}`">
62 63 <el-input type="textarea" :rows="4" v-model="form.context" readonly />
63 64 </el-form-item>
64 65  
... ... @@ -100,7 +101,7 @@ export default {
100 101 complaintName: '',
101 102 tel: '',
102 103 context: '',
103   - typeCdName: '',
  104 + typeName: '',
104 105 stateName: '',
105 106 roomName: '',
106 107 currentUserName: '',
... ... @@ -116,6 +117,7 @@ export default {
116 117 methods: {
117 118 open(row) {
118 119 this.visible = true
  120 + console.log(row)
119 121 this.form = {
120 122 ...row,
121 123 photosShow: row.photos.map(photo => ({
... ...
src/components/oa/deleteQuestionAnswer.vue
... ... @@ -36,8 +36,8 @@ export default {
36 36 }
37 37 },
38 38 methods: {
39   - open(qaId) {
40   - this.qaId = qaId
  39 + open(qa) {
  40 + this.qaId = qa.qaId
41 41 this.visible = true
42 42 },
43 43 async handleConfirm() {
... ...
src/components/oa/editExamineProject.vue
1 1 <template>
2   - <el-dialog
3   - :title="$t('examineProjectManage.edit.title')"
4   - :visible.sync="visible"
5   - width="50%"
6   - @close="handleClose"
7   - >
8   - <el-form
9   - ref="form"
10   - :model="formData"
11   - :rules="rules"
12   - label-width="120px"
13   - label-position="right"
14   - >
15   - <el-form-item
16   - :label="$t('examineProjectManage.form.name')"
17   - prop="name"
18   - >
19   - <el-input
20   - v-model="formData.name"
21   - :placeholder="$t('examineProjectManage.form.namePlaceholder')"
22   - />
  2 + <el-dialog :title="$t('examineProjectManage.edit.title')" :visible.sync="visible" width="40%" @close="handleClose">
  3 + <el-form ref="form" :model="formData" :rules="rules" label-width="120px" label-position="right" class="text-left">
  4 + <el-form-item :label="$t('examineProjectManage.form.name')" prop="name">
  5 + <el-input v-model="formData.name" :placeholder="$t('examineProjectManage.form.namePlaceholder')" />
23 6 </el-form-item>
24   - <el-form-item
25   - :label="$t('examineProjectManage.form.post')"
26   - prop="postCd"
27   - >
28   - <el-select
29   - v-model="formData.postCd"
30   - :placeholder="$t('examineProjectManage.form.postPlaceholder')"
31   - style="width:100%"
32   - >
33   - <el-option
34   - :label="$t('examineProjectManage.form.commonPost')"
35   - value="9999"
36   - />
  7 + <el-form-item :label="$t('examineProjectManage.form.post')" prop="postCd">
  8 + <el-select v-model="formData.postCd" :placeholder="$t('examineProjectManage.form.postPlaceholder')"
  9 + style="width:100%">
  10 + <el-option :label="$t('examineProjectManage.form.commonPost')" value="9999" />
37 11 </el-select>
38 12 </el-form-item>
39   - <el-form-item
40   - :label="$t('examineProjectManage.form.weight')"
41   - prop="weight"
42   - >
43   - <el-input
44   - v-model="formData.weight"
45   - :placeholder="$t('examineProjectManage.form.weightPlaceholder')"
46   - style="width:80%"
47   - >
  13 + <el-form-item :label="$t('examineProjectManage.form.weight')" prop="weight">
  14 + <el-input v-model="formData.weight" :placeholder="$t('examineProjectManage.form.weightPlaceholder')"
  15 + style="width:80%">
48 16 <template slot="append">%</template>
49 17 </el-input>
50 18 </el-form-item>
51   - <el-form-item
52   - :label="$t('examineProjectManage.form.state')"
53   - prop="state"
54   - >
55   - <el-select
56   - v-model="formData.state"
57   - :placeholder="$t('examineProjectManage.form.statePlaceholder')"
58   - style="width:100%"
59   - >
60   - <el-option
61   - :label="$t('examineProjectManage.status.enable')"
62   - value="Y"
63   - />
64   - <el-option
65   - :label="$t('examineProjectManage.status.disable')"
66   - value="N"
67   - />
  19 + <el-form-item :label="$t('examineProjectManage.form.state')" prop="state">
  20 + <el-select v-model="formData.state" :placeholder="$t('examineProjectManage.form.statePlaceholder')"
  21 + style="width:100%">
  22 + <el-option :label="$t('examineProjectManage.status.enable')" value="Y" />
  23 + <el-option :label="$t('examineProjectManage.status.disable')" value="N" />
68 24 </el-select>
69 25 </el-form-item>
70 26 </el-form>
... ...
src/views/oa/addExamineStaffList.vue
... ... @@ -9,7 +9,7 @@
9 9 </el-button>
10 10 </div>
11 11 </div>
12   - <el-form ref="form" :model="addExamineStaffInfo" label-width="120px">
  12 + <el-form ref="form" :model="addExamineStaffInfo" label-width="120px" class="text-left">
13 13 <el-row>
14 14 <el-col :span="24">
15 15 <el-form-item :label="$t('addExamineStaff.staffName')">
... ... @@ -38,8 +38,7 @@
38 38 <el-row>
39 39 <el-col :span="24">
40 40 <el-form-item :label="$t('addExamineStaff.staffAvatar')">
41   - <upload-image-url ref="uploadImage" :call-back-listener="'addExamineStaff'"
42   - :call-back-function="'notifyUploadImage'" :image-count="1">
  41 + <upload-image-url ref="uploadImage" @notifyUploadCoverImage="notifyUploadImage" :image-count="1">
43 42 </upload-image-url>
44 43 </el-form-item>
45 44 </el-col>
... ... @@ -114,13 +113,10 @@ export default {
114 113 this.addExamineStaffInfo.communityId = getCommunityId()
115 114 this._listExamineProjects()
116 115 },
117   - mounted() {
118   - this.$on('addExamineStaff', 'notifyUploadImage', this.notifyUploadImage)
119   - },
120 116 methods: {
121 117 notifyUploadImage(_param) {
122 118 if (_param.length > 0) {
123   - this.addExamineStaffInfo.headerImg = _param[0].fileId
  119 + this.addExamineStaffInfo.headerImg = _param[0]
124 120 } else {
125 121 this.addExamineStaffInfo.headerImg = ''
126 122 }
... ...
src/views/oa/addQuestionAnswerLang.js
... ... @@ -25,17 +25,6 @@ export const messages = {
25 25 saveSuccess: 'Questionnaire saved successfully',
26 26 saveError: 'Failed to save questionnaire'
27 27 },
28   - questionTitle: {
29   - name: 'Name',
30   - type: 'Type',
31   - options: 'Options',
32   - operation: 'Operation',
33   - delete: 'Delete',
34   - createTime: 'Create Time',
35   - singleChoice: 'Single Choice',
36   - multipleChoice: 'Multiple Choice',
37   - shortAnswer: 'Short Answer'
38   - },
39 28 selectRoom: {
40 29 buildingUnit: 'Building Unit',
41 30 roomInfo: 'Room Information',
... ... @@ -78,17 +67,6 @@ export const messages = {
78 67 saveSuccess: '问卷保存成功',
79 68 saveError: '问卷保存失败'
80 69 },
81   - questionTitle: {
82   - name: '名称',
83   - type: '类型',
84   - options: '选项',
85   - operation: '操作',
86   - delete: '删除',
87   - createTime: '创建时间',
88   - singleChoice: '单选',
89   - multipleChoice: '多选',
90   - shortAnswer: '简答'
91   - },
92 70 selectRoom: {
93 71 buildingUnit: '楼栋单元',
94 72 roomInfo: '房屋信息',
... ...
src/views/oa/addQuestionAnswerList.vue
... ... @@ -52,23 +52,23 @@
52 52 </el-button>
53 53 </div>
54 54 <el-table :data="addQuestionAnswerInfo.questionTitles" border style="width: 100%">
55   - <el-table-column prop="qaTitle" :label="$t('questionTitle.name')" align="center" />
56   - <el-table-column prop="titleType" :label="$t('questionTitle.type')" align="center">
  55 + <el-table-column prop="qaTitle" :label="$t('questionTitle.table.name')" align="center" />
  56 + <el-table-column prop="titleType" :label="$t('questionTitle.table.type')" align="center">
57 57 <template slot-scope="scope">
58 58 {{ getTitleTypeName(scope.row.titleType) }}
59 59 </template>
60 60 </el-table-column>
61   - <el-table-column :label="$t('questionTitle.options')" align="center">
  61 + <el-table-column :label="$t('questionTitle.table.options')" align="center">
62 62 <template slot-scope="scope">
63 63 <div v-for="(item, index) in scope.row.titleValues" :key="index">
64 64 {{ item.seq }}、{{ item.qaValue }}
65 65 </div>
66 66 </template>
67 67 </el-table-column>
68   - <el-table-column :label="$t('questionTitle.operation')" align="center" width="150">
  68 + <el-table-column :label="$t('common.operation')" align="center" width="150">
69 69 <template slot-scope="scope">
70 70 <el-button type="danger" size="mini" @click="openDeleteQuestionTitle(scope.row)">
71   - {{ $t('questionTitle.delete') }}
  71 + {{ $t('common.delete') }}
72 72 </el-button>
73 73 </template>
74 74 </el-table-column>
... ... @@ -134,11 +134,11 @@ export default {
134 134 methods: {
135 135 getTitleTypeName(titleType) {
136 136 if (titleType === '1001') {
137   - return this.$t('questionTitle.singleChoice')
  137 + return this.$t('questionTitle.types.singleChoice')
138 138 } else if (titleType === '2002') {
139   - return this.$t('questionTitle.multipleChoice')
  139 + return this.$t('questionTitle.types.multipleChoice')
140 140 } else {
141   - return this.$t('questionTitle.shortAnswer')
  141 + return this.$t('questionTitle.types.shortAnswer')
142 142 }
143 143 },
144 144 chooseTitle() {
... ...
src/views/oa/complaintList.vue
... ... @@ -2,9 +2,9 @@
2 2 <div class="complaint-container animated fadeInRight">
3 3 <el-row :gutter="20">
4 4 <el-col :span="4">
5   - <el-card class="border-radius">
6   - <div class="treeview">
7   - <ul class="list-group text-center border-radius">
  5 + <div class="list-group-border-radius">
  6 + <div class=" treeview">
  7 + <ul class="list-group text-center ">
8 8 <li v-for="(item, index) in complaintInfo.states" :key="index" @click="swatchComplaintState(item)"
9 9 :class="{ 'vc-node-selected': complaintInfo.conditions.state == item.statusCd }"
10 10 class="list-group-item node-orgTree">
... ... @@ -12,7 +12,7 @@
12 12 </li>
13 13 </ul>
14 14 </div>
15   - </el-card>
  15 + </div>
16 16 </el-col>
17 17 <el-col :span="20">
18 18 <el-card>
... ... @@ -233,28 +233,6 @@ export default {
233 233 border-radius: 4px;
234 234 }
235 235  
236   - .treeview {
237   - .list-group {
238   - padding: 0;
239   - margin: 0;
240   - list-style: none;
241   -
242   - .list-group-item {
243   - padding: 10px 15px;
244   - margin-bottom: -1px;
245   - border: 1px solid #ddd;
246   - cursor: pointer;
247   -
248   - &:hover {
249   - background-color: #f5f5f5;
250   - }
251   -
252   - &.vc-node-selected {
253   - background-color: #409EFF;
254   - color: #fff;
255   - }
256   - }
257   - }
258   - }
  236 +
259 237 }
260 238 </style>
261 239 \ No newline at end of file
... ...
src/views/oa/editExamineStaffList.vue
... ... @@ -10,7 +10,7 @@
10 10 </div>
11 11 </div>
12 12  
13   - <el-form ref="form" :model="editExamineStaffInfo" label-width="120px">
  13 + <el-form ref="form" :model="editExamineStaffInfo" label-width="120px" class="text-left">
14 14 <el-row>
15 15 <el-col :span="24">
16 16 <el-form-item :label="$t('editExamineStaff.staffName')">
... ... @@ -37,7 +37,7 @@
37 37 <el-row>
38 38 <el-col :span="24">
39 39 <el-form-item :label="$t('editExamineStaff.staffPhoto')">
40   - <upload-image-url ref="uploadImage" :image-count="1" @notifyUploadImage="handleUploadImage">
  40 + <upload-image-url ref="uploadImage" :image-count="1" @notifyUploadCoverImage="handleUploadImage">
41 41 </upload-image-url>
42 42 </el-form-item>
43 43 </el-col>
... ... @@ -108,7 +108,7 @@ export default {
108 108 methods: {
109 109 handleUploadImage(images) {
110 110 if (images.length > 0) {
111   - this.editExamineStaffInfo.headerImg = images[0].fileId
  111 + this.editExamineStaffInfo.headerImg = images[0]
112 112 } else {
113 113 this.editExamineStaffInfo.headerImg = ''
114 114 }
... ...
src/views/oa/examineProjectManageList.vue
... ... @@ -5,7 +5,7 @@
5 5 <div slot="header" class="flex justify-between">
6 6 <span>{{ $t('examineProjectManage.search.title') }}</span>
7 7 </div>
8   - <el-row :gutter="20">
  8 + <el-row :gutter="20" >
9 9 <el-col :span="6">
10 10 <el-input v-model="searchForm.name" :placeholder="$t('examineProjectManage.search.namePlaceholder')"
11 11 clearable />
... ...
src/views/oa/printOwnerVotingList.vue
1 1 <template>
2 2 <div class="print-owner-voting-container">
3   - <el-card>
4 3 <el-row>
5 4 <el-col :span="24">
6 5 <div class="text-center">
... ... @@ -98,7 +97,7 @@
98 97 </el-button>
99 98 </el-col>
100 99 </el-row>
101   - </el-card>
  100 +
102 101 </div>
103 102 </template>
104 103  
... ...
src/views/oa/printQuestionAnswerList.vue
1 1 <template>
2 2 <div class="print-question-answer-container">
3   - <el-card>
  3 +
4 4 <div class="text-center">
5 5 <h1>{{ printQuestionAnswerInfo.qaName }}</h1>
6 6 </div>
... ... @@ -59,7 +59,7 @@
59 59 {{ $t('common.cancel') }}
60 60 </el-button>
61 61 </div>
62   - </el-card>
  62 +
63 63 </div>
64 64 </template>
65 65  
... ...
src/views/oa/visitManageList.vue
... ... @@ -168,6 +168,7 @@
168 168 import { listVisits, listVisitTypes } from '@/api/oa/visitManageApi'
169 169 import { getDict } from '@/api/community/communityApi'
170 170 import { getCommunityId } from '@/api/community/communityApi'
  171 +import { jumpToIot } from '@/api/user/menuApi'
171 172  
172 173 export default {
173 174 name: 'VisitManageList',
... ... @@ -274,7 +275,8 @@ export default {
274 275 this._listVisits(1, this.page.size)
275 276 },
276 277 _toIotVisit() {
277   - this.$router.push('/pages/accessControl/visitManage')
  278 + //this.$router.push('/pages/accessControl/visitManage')
  279 + jumpToIot('/#/pages/accessControl/visitManage')
278 280 },
279 281 _toVisitDetail(visit) {
280 282 this.$router.push(`/pages/accessControl/visitDetail?visitId=${visit.visitId}&phoneNumber=${visit.phoneNumber}`)
... ...