From ce841ddf85c48bae32f9e3068403fdfe98ac8711 Mon Sep 17 00:00:00 2001
From: zzw <228544128@qq.com>
Date: 星期三, 07 十月 2026 12:35:09 +0800
Subject: [PATCH] feat: add extension defaults for fault reporting

---
 emergency-repair-web/src/views/system/UserManage.vue |   65 ++++++++++++++++++++++++++++++++
 1 files changed, 65 insertions(+), 0 deletions(-)

diff --git a/emergency-repair-web/src/views/system/UserManage.vue b/emergency-repair-web/src/views/system/UserManage.vue
index 2e3c9a5..0cc4acf 100644
--- a/emergency-repair-web/src/views/system/UserManage.vue
+++ b/emergency-repair-web/src/views/system/UserManage.vue
@@ -39,6 +39,11 @@
             </template>
           </el-table-column>
           <el-table-column prop="phoneNumber" label="鎵嬫満鍙�" width="130"></el-table-column>
+          <el-table-column label="鎵╁睍灞炴��" width="100" align="center">
+            <template slot-scope="{ row }">
+              <el-button type="text" v-permission="'system:users:ext'" @click="openExt(row)">{{ row.extConfigured ? '缂栬緫' : '璁剧疆' }}</el-button>
+            </template>
+          </el-table-column>
           <el-table-column label="鐘舵��" width="80" align="center">
             <template slot-scope="{ row }">
               <el-tag size="mini" :type="isDisabled(row) ? 'info' : 'success'">{{ isDisabled(row) ? '鍋滅敤' : '姝e父' }}</el-tag>
@@ -99,6 +104,29 @@
           <el-button type="primary" :loading="batchSaving" v-permission="'system:users:assign'" @click="saveBatchRoles">淇濆瓨</el-button>
         </span>
       </el-dialog>
+      <el-dialog :title="'鐢ㄦ埛鎵╁睍灞炴�ц缃� - ' + ((currentExtUser.nickName || currentExtUser.userName) || '')" :visible.sync="extVisible" width="560px" append-to-body :close-on-click-modal="false">
+        <el-form label-width="105px" v-loading="extLoading">
+          <el-form-item label="宸ョ▼涓撲笟">
+            <el-select v-model="extForm.engineeringMajor" clearable filterable placeholder="璇烽�夋嫨宸ョ▼涓撲笟" style="width:100%">
+              <el-option v-for="item in engineeringMajors" :key="item.id" :label="item.name" :value="item.name"></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="rk_T闃熶笓涓�">
+            <el-select v-model="extForm.teamMajor" clearable filterable placeholder="璇烽�夋嫨rk_T闃熶笓涓�" style="width:100%">
+              <el-option v-for="item in teamMajors" :key="item.id" :label="item.name" :value="item.name"></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="璐熻矗rk_T">
+            <el-select v-model="extForm.responsibleXNo" clearable filterable placeholder="璇烽�夋嫨rk_X鍙�" style="width:100%">
+              <el-option v-for="item in xNumbers" :key="item" :label="item" :value="item"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-form>
+        <template slot="footer">
+          <el-button @click="extVisible = false">鍙栨秷</el-button>
+          <el-button type="primary" :loading="extSaving" @click="saveExt">淇濆瓨</el-button>
+        </template>
+      </el-dialog>
   </div>
 </template>
 <script>
@@ -122,12 +150,21 @@
       roles: [],
       selected: null,
       checkedRoleIds: [],
+      extVisible: false,
+      extLoading: false,
+      extSaving: false,
+      currentExtUser: {},
+      extForm: { engineeringMajor: '', teamMajor: '', responsibleXNo: '' },
+      engineeringMajors: [],
+      teamMajors: [],
+      xNumbers: [],
       filters: { keyword: '', deptId: null, roleId: null }
     }
   },
   created() {
     this.loadRoles()
     this.loadDepts()
+    this.loadExtOptions()
     this.load()
   },
   methods: {
@@ -159,6 +196,34 @@
     loadDepts() {
       api.get('/system/depts').then(res => { this.depts = res.data || [] })
     },
+    loadExtOptions() {
+      api.get('/system/engineering-majors').then(res => { this.engineeringMajors = res.data || [] })
+      api.get('/system/team-majors').then(res => { this.teamMajors = res.data || [] })
+      api.get('/system/tree/product/x-numbers').then(res => { this.xNumbers = res.data || [] })
+    },
+    openExt(row) {
+      this.currentExtUser = { ...row }
+      this.extForm = { engineeringMajor: '', teamMajor: '', responsibleXNo: '' }
+      this.extVisible = true
+      this.extLoading = true
+      api.get('/system/users/' + row.userId + '/ext').then(res => {
+        const data = res.data || {}
+        this.extForm = {
+          engineeringMajor: data.engineeringMajor || '',
+          teamMajor: data.teamMajor || '',
+          responsibleXNo: data.responsibleXNo || ''
+        }
+      }).finally(() => { this.extLoading = false })
+    },
+    saveExt() {
+      if (!this.currentExtUser.userId) return
+      this.extSaving = true
+      api.put('/system/users/' + this.currentExtUser.userId + '/ext', this.extForm).then(() => {
+        this.$message.success('鎵╁睍灞炴�ц缃垚鍔�')
+        this.extVisible = false
+        this.load()
+      }).finally(() => { this.extSaving = false })
+    },
     search() {
       this.current = 1
       this.load()

--
Gitblit v1.9.1