Blame view

src/components/owner/addOwnerMember.vue 10.7 KB
c85e0853   wuxw   业主详情开发完成
1
  <template>
84ba0155   wuxw   家庭成员测试
2
3
    <el-dialog :title="$t('addOwnerMember.title')" :visible.sync="dialogVisible" width="80%"
      @close="_closeSaveOwnerModal">
c85e0853   wuxw   业主详情开发完成
4
5
6
7
      <el-form :model="addOwnerMemberInfo" :rules="rules" ref="form" label-width="120px">
        <el-row :gutter="20">
          <el-col :span="12">
            <el-form-item :label="$t('addOwnerMember.personRole')" prop="personRole">
84ba0155   wuxw   家庭成员测试
8
9
10
              <el-select v-model="addOwnerMemberInfo.personRole"
                :placeholder="$t('addOwnerMember.placeholder.personRole')" class="w100">
                <el-option v-for="item in roleOptions" :key="item.value" :label="item.label" :value="item.value" />
c85e0853   wuxw   业主详情开发完成
11
12
              </el-select>
            </el-form-item>
84ba0155   wuxw   家庭成员测试
13
  
c85e0853   wuxw   业主详情开发完成
14
            <el-form-item :label="$t('addOwnerMember.name')" prop="name">
84ba0155   wuxw   家庭成员测试
15
16
              <el-input v-model.trim="addOwnerMemberInfo.name" :placeholder="$t('addOwnerMember.placeholder.name')"
                clearable />
c85e0853   wuxw   业主详情开发完成
17
            </el-form-item>
84ba0155   wuxw   家庭成员测试
18
  
c85e0853   wuxw   业主详情开发完成
19
            <el-form-item :label="$t('addOwnerMember.link')" prop="link">
84ba0155   wuxw   家庭成员测试
20
21
              <el-input v-model.trim="addOwnerMemberInfo.link" :placeholder="$t('addOwnerMember.placeholder.link')"
                clearable />
c85e0853   wuxw   业主详情开发完成
22
            </el-form-item>
84ba0155   wuxw   家庭成员测试
23
  
c85e0853   wuxw   业主详情开发完成
24
            <el-form-item :label="$t('addOwnerMember.sex')" prop="sex">
84ba0155   wuxw   家庭成员测试
25
26
27
              <el-select v-model="addOwnerMemberInfo.sex" :placeholder="$t('addOwnerMember.placeholder.sex')"
                class="w100">
                <el-option v-for="item in sexOptions" :key="item.value" :label="item.label" :value="item.value" />
c85e0853   wuxw   业主详情开发完成
28
29
30
              </el-select>
            </el-form-item>
          </el-col>
84ba0155   wuxw   家庭成员测试
31
  
c85e0853   wuxw   业主详情开发完成
32
33
          <el-col :span="12" class="text-center">
            <div class="avatar-uploader">
84ba0155   wuxw   家庭成员测试
34
35
36
              <img v-if="addOwnerMemberInfo.ownerPhotoUrl" :src="addOwnerMemberInfo.ownerPhotoUrl" class="avatar"
                :alt="$t('addOwnerMember.photo')">
              <img v-else src="/img/noPhoto.jpg" class="avatar" :alt="$t('addOwnerMember.photo')">
c85e0853   wuxw   业主详情开发完成
37
            </div>
84ba0155   wuxw   家庭成员测试
38
            <el-button type="primary" class="mt10" @click="_uploadPhoto">
c85e0853   wuxw   业主详情开发完成
39
40
              {{ $t('addOwnerMember.uploadPhoto') }}
            </el-button>
84ba0155   wuxw   家庭成员测试
41
            <input type="file" ref="fileInput" accept=".jpg,.jpeg,.png" @change="_choosePhoto" style="display: none">
c85e0853   wuxw   业主详情开发完成
42
43
          </el-col>
        </el-row>
84ba0155   wuxw   家庭成员测试
44
  
c85e0853   wuxw   业主详情开发完成
45
46
47
        <el-row :gutter="20">
          <el-col :span="12">
            <el-form-item :label="$t('addOwnerMember.concactLink')">
84ba0155   wuxw   家庭成员测试
48
49
              <el-input v-model.trim="addOwnerMemberInfo.concactLink"
                :placeholder="$t('addOwnerMember.placeholder.concactLink')" clearable />
c85e0853   wuxw   业主详情开发完成
50
            </el-form-item>
84ba0155   wuxw   家庭成员测试
51
  
c85e0853   wuxw   业主详情开发完成
52
            <el-form-item :label="$t('addOwnerMember.address')">
84ba0155   wuxw   家庭成员测试
53
54
              <el-input v-model.trim="addOwnerMemberInfo.address" :placeholder="$t('addOwnerMember.placeholder.address')"
                clearable />
c85e0853   wuxw   业主详情开发完成
55
56
            </el-form-item>
          </el-col>
84ba0155   wuxw   家庭成员测试
57
  
c85e0853   wuxw   业主详情开发完成
58
59
          <el-col :span="12">
            <el-form-item :label="$t('addOwnerMember.idCard')">
84ba0155   wuxw   家庭成员测试
60
61
              <el-input v-model.trim="addOwnerMemberInfo.idCard" :placeholder="$t('addOwnerMember.placeholder.idCard')"
                clearable />
c85e0853   wuxw   业主详情开发完成
62
            </el-form-item>
84ba0155   wuxw   家庭成员测试
63
  
c85e0853   wuxw   业主详情开发完成
64
            <el-form-item :label="$t('addOwnerMember.remark')">
84ba0155   wuxw   家庭成员测试
65
66
              <el-input v-model.trim="addOwnerMemberInfo.remark" :placeholder="$t('addOwnerMember.placeholder.remark')"
                clearable />
c85e0853   wuxw   业主详情开发完成
67
68
69
            </el-form-item>
          </el-col>
        </el-row>
84ba0155   wuxw   家庭成员测试
70
71
  
        <template v-for="(item, index) in addOwnerMemberInfo.attrs">
c85e0853   wuxw   业主详情开发完成
72
73
74
          <el-row :gutter="20" v-if="index % 2 === 0" :key="index">
            <el-col :span="12">
              <el-form-item :label="item.specName" v-if="item.specType === '2233'">
84ba0155   wuxw   家庭成员测试
75
                <el-input v-model="item.value" :placeholder="item.specHoldplace" clearable />
c85e0853   wuxw   业主详情开发完成
76
              </el-form-item>
84ba0155   wuxw   家庭成员测试
77
  
c85e0853   wuxw   业主详情开发完成
78
              <el-form-item :label="item.specName" v-if="item.specType === '3344'">
84ba0155   wuxw   家庭成员测试
79
80
81
                <el-select v-model="item.value" :placeholder="item.specHoldplace" class="w100">
                  <el-option v-for="value in item.values" :key="value.value" :label="value.valueName"
                    :value="value.value" />
c85e0853   wuxw   业主详情开发完成
82
83
84
                </el-select>
              </el-form-item>
            </el-col>
84ba0155   wuxw   家庭成员测试
85
86
87
88
89
90
  
            <el-col :span="12" v-if="index < addOwnerMemberInfo.attrs.length - 1">
              <el-form-item :label="addOwnerMemberInfo.attrs[index + 1].specName"
                v-if="addOwnerMemberInfo.attrs[index + 1].specType === '2233'">
                <el-input v-model="addOwnerMemberInfo.attrs[index + 1].value"
                  :placeholder="addOwnerMemberInfo.attrs[index + 1].specHoldplace" clearable />
c85e0853   wuxw   业主详情开发完成
91
              </el-form-item>
84ba0155   wuxw   家庭成员测试
92
93
94
95
96
97
98
  
              <el-form-item :label="addOwnerMemberInfo.attrs[index + 1].specName"
                v-if="addOwnerMemberInfo.attrs[index + 1].specType === '3344'">
                <el-select v-model="addOwnerMemberInfo.attrs[index + 1].value"
                  :placeholder="addOwnerMemberInfo.attrs[index + 1].specHoldplace" class="w100">
                  <el-option v-for="value in addOwnerMemberInfo.attrs[index + 1].values" :key="value.value"
                    :label="value.valueName" :value="value.value" />
c85e0853   wuxw   业主详情开发完成
99
100
101
102
103
104
                </el-select>
              </el-form-item>
            </el-col>
          </el-row>
        </template>
      </el-form>
84ba0155   wuxw   家庭成员测试
105
  
c85e0853   wuxw   业主详情开发完成
106
107
108
109
110
111
112
113
114
      <div slot="footer" class="dialog-footer">
        <el-button @click="_closeSaveOwnerModal">{{ $t('common.cancel') }}</el-button>
        <el-button type="primary" @click="saveOwnerMemberInfo">{{ $t('common.save') }}</el-button>
      </div>
    </el-dialog>
  </template>
  
  <script>
  import { getCommunityId } from '@/api/community/communityApi'
84ba0155   wuxw   家庭成员测试
115
  import { getAttrValue } from '@/api/community/communityApi'
c85e0853   wuxw   业主详情开发完成
116
  import { uploadFile } from '@/api/staff/addStaffApi'
84ba0155   wuxw   家庭成员测试
117
118
119
  import { getAttrSpecList } from '@/api/dev/attrSpecApi'
  import { saveOwnerMember } from '@/api/owner/addOwnerMemberApi'
  
c85e0853   wuxw   业主详情开发完成
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
  
  export default {
    name: 'AddOwnerMember',
    data() {
      return {
        dialogVisible: false,
        addOwnerMemberInfo: {
          name: '',
          link: '',
          address: '',
          sex: '',
          remark: '',
          ownerId: '',
          ownerPhoto: '',
          ownerPhotoUrl: '',
          idCard: '',
          personType: 'P',
          personRole: '3',
          concactLink: '',
          attrs: []
        },
        roleOptions: [
          { value: '2', label: this.$t('addOwnerMember.role.tenant') },
          { value: '3', label: this.$t('addOwnerMember.role.family') },
          { value: '4', label: this.$t('addOwnerMember.role.staff') },
          { value: '99', label: this.$t('addOwnerMember.role.other') }
        ],
        sexOptions: [
          { value: '0', label: this.$t('common.male') },
          { value: '1', label: this.$t('common.female') }
        ],
        rules: {
          personRole: [
            { required: true, message: this.$t('addOwnerMember.placeholder.personRole'), trigger: 'change' }
          ],
          name: [
            { required: true, message: this.$t('addOwnerMember.placeholder.name'), trigger: 'blur' },
            { min: 2, max: 64, message: this.$t('addOwnerMember.validate.nameLength'), trigger: 'blur' }
          ],
          link: [
            { required: true, message: this.$t('addOwnerMember.placeholder.link'), trigger: 'blur' },
            { pattern: /^1[3-9]\d{9}$/, message: this.$t('addOwnerMember.validate.phoneFormat'), trigger: 'blur' }
          ],
          sex: [
            { required: true, message: this.$t('addOwnerMember.placeholder.sex'), trigger: 'change' }
          ],
          idCard: [
            { pattern: /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/, message: this.$t('addOwnerMember.validate.idCardFormat'), trigger: 'blur' }
          ],
          remark: [
            { max: 200, message: this.$t('addOwnerMember.validate.remarkLength'), trigger: 'blur' }
          ]
        }
      }
    },
    methods: {
84ba0155   wuxw   家庭成员测试
176
177
      open(params) {
        this.addOwnerMemberInfo.ownerId = params.ownerId
c85e0853   wuxw   业主详情开发完成
178
179
180
181
182
183
        this._loadOwnerAttrSpec()
        this.dialogVisible = true
        this.$nextTick(() => {
          this.$refs.form.clearValidate()
        })
      },
84ba0155   wuxw   家庭成员测试
184
185
  
      async saveOwnerMemberInfo() {
c85e0853   wuxw   业主详情开发完成
186
187
188
189
190
191
        this.$refs.form.validate(valid => {
          if (valid) {
            const params = {
              ...this.addOwnerMemberInfo,
              communityId: getCommunityId()
            }
84ba0155   wuxw   家庭成员测试
192
            saveOwnerMember(params)
c85e0853   wuxw   业主详情开发完成
193
              .then(res => {
84ba0155   wuxw   家庭成员测试
194
                if (res.code === 0) {
c85e0853   wuxw   业主详情开发完成
195
196
197
198
199
200
201
202
203
204
205
206
207
208
                  this.$message.success(this.$t('common.saveSuccess'))
                  this.dialogVisible = false
                  this.$emit('save-success')
                } else {
                  this.$message.error(res.data.msg || this.$t('common.saveFailed'))
                }
              })
              .catch(err => {
                console.error('请求失败:', err)
                this.$message.error(this.$t('common.saveFailed'))
              })
          }
        })
      },
84ba0155   wuxw   家庭成员测试
209
  
c85e0853   wuxw   业主详情开发完成
210
211
      _loadOwnerAttrSpec() {
        this.addOwnerMemberInfo.attrs = []
84ba0155   wuxw   家庭成员测试
212
        getAttrSpecList({ page: 1, row: 100, tableName: 'building_owner_attr' }).then(data => {
c85e0853   wuxw   业主详情开发完成
213
214
215
216
217
218
219
220
221
222
          data.forEach(item => {
            if (item.specShow === 'Y') {
              item.value = ''
              item.values = []
              this._loadAttrValue(item.specCd, item.values)
              this.addOwnerMemberInfo.attrs.push(item)
            }
          })
        })
      },
84ba0155   wuxw   家庭成员测试
223
  
c85e0853   wuxw   业主详情开发完成
224
225
226
227
228
229
230
231
232
      _loadAttrValue(specCd, values) {
        getAttrValue(specCd).then(data => {
          data.forEach(item => {
            if (item.valueShow === 'Y') {
              values.push(item)
            }
          })
        })
      },
84ba0155   wuxw   家庭成员测试
233
  
c85e0853   wuxw   业主详情开发完成
234
235
236
      _uploadPhoto() {
        this.$refs.fileInput.click()
      },
84ba0155   wuxw   家庭成员测试
237
  
c85e0853   wuxw   业主详情开发完成
238
239
240
241
242
243
244
245
      _choosePhoto(event) {
        const files = event.target.files
        if (files && files.length > 0) {
          const file = files[0]
          if (file.size > 1024 * 1024 * 2) {
            this.$message.error(this.$t('addOwnerMember.validate.photoSize'))
            return
          }
84ba0155   wuxw   家庭成员测试
246
  
c85e0853   wuxw   业主详情开发完成
247
248
249
          this._doUploadImage(file)
        }
      },
84ba0155   wuxw   家庭成员测试
250
  
c85e0853   wuxw   业主详情开发完成
251
252
253
254
      _doUploadImage(file) {
        const formData = new FormData()
        formData.append('uploadFile', file)
        formData.append('communityId', getCommunityId())
84ba0155   wuxw   家庭成员测试
255
  
c85e0853   wuxw   业主详情开发完成
256
257
258
259
260
261
262
263
        uploadFile(formData).then(res => {
          this.addOwnerMemberInfo.ownerPhoto = res.fileId
          this.addOwnerMemberInfo.ownerPhotoUrl = res.url
        }).catch(err => {
          console.error('上传失败:', err)
          this.$message.error(this.$t('addOwnerMember.uploadFailed'))
        })
      },
84ba0155   wuxw   家庭成员测试
264
  
c85e0853   wuxw   业主详情开发完成
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
      _closeSaveOwnerModal() {
        this.dialogVisible = false
        this.$refs.form.resetFields()
        this.addOwnerMemberInfo = {
          name: '',
          link: '',
          address: '',
          sex: '',
          remark: '',
          ownerId: '',
          ownerPhoto: '',
          ownerPhotoUrl: '',
          idCard: '',
          personType: 'P',
          personRole: '3',
          concactLink: '',
          attrs: []
        }
      }
    }
  }
  </script>
  
  <style scoped>
  .w100 {
    width: 100%;
  }
84ba0155   wuxw   家庭成员测试
292
  
c85e0853   wuxw   业主详情开发完成
293
294
295
  .mt10 {
    margin-top: 10px;
  }
84ba0155   wuxw   家庭成员测试
296
  
c85e0853   wuxw   业主详情开发完成
297
298
299
  .text-center {
    text-align: center;
  }
84ba0155   wuxw   家庭成员测试
300
  
c85e0853   wuxw   业主详情开发完成
301
302
303
304
305
306
  .avatar-uploader {
    width: 100%;
    display: flex;
    justify-content: center;
    margin-bottom: 10px;
  }
84ba0155   wuxw   家庭成员测试
307
  
c85e0853   wuxw   业主详情开发完成
308
309
310
311
312
313
  .avatar {
    width: 150px;
    height: 150px;
    object-fit: cover;
  }
  </style>