guhongwei 4 years ago
parent
commit
d22c34ac1e
3 changed files with 95 additions and 15 deletions
  1. 78 4
      src/layout/user/studentInfo.vue
  2. 4 0
      src/store/index.js
  3. 13 11
      src/views/user/personalDetail.vue

+ 78 - 4
src/layout/user/studentInfo.vue

@@ -7,7 +7,7 @@
             <div class="block"><el-avatar :size="163" :src="circleUrl"></el-avatar></div>
             <div class="block"><el-avatar :size="163" :src="circleUrl"></el-avatar></div>
           </div>
           </div>
         </el-col>
         </el-col>
-        <span>
+        <!-- <span>
           <el-col :span="24" class="mess">
           <el-col :span="24" class="mess">
             <el-col :span="22" class="info">
             <el-col :span="22" class="info">
               <p class="title">姓名</p>
               <p class="title">姓名</p>
@@ -134,7 +134,45 @@
               <van-icon name="arrow" />
               <van-icon name="arrow" />
             </el-col>
             </el-col>
           </el-col>
           </el-col>
-        </span>
+        </span> -->
+        <!-- 学生修改 -->
+        <van-col span="24">
+          <van-form @submit="onSubmit">
+            <van-field v-model="messInfo.name" name="姓名" label="姓名" placeholder="姓名" :rules="[{ required: true, message: '请填写用户名' }]" />
+            <van-field v-model="messInfo.id_number" name="身份证号" label="身份证号" placeholder="身份证号" />
+            <van-field name="radio" label="性别">
+              <template #input>
+                <van-radio-group v-model="messInfo.gender" direction="horizontal">
+                  <van-radio name="男">男</van-radio>
+                  <van-radio name="女">女</van-radio>
+                </van-radio-group>
+              </template>
+            </van-field>
+            <van-field readonly clickable name="picker" :value="messInfo.nation" label="民族" placeholder="点击选择民族" @click="showPicker = true" />
+            <van-popup v-model="showPicker" position="bottom">
+              <van-picker show-toolbar :columns="nationList" @confirm="onConfirm" @cancel="showPicker = false" />
+            </van-popup>
+            <van-field v-model="messInfo.phone" name="手机号" label="手机号" placeholder="手机号" />
+            <van-field v-model="messInfo.qq" name="QQ" label="QQ" placeholder="QQ" />
+            <!-- <van-field v-model="messInfo.school_name" name="学校" label="学校" placeholder="学校" /> -->
+            <van-field readonly clickable name="picker" :value="messInfo.school_name" label="学校" placeholder="点击选择学校" @click="showSchool = true" />
+            <van-popup v-model="showSchool" position="bottom">
+              <van-picker show-toolbar :columns="schoolList" @confirm="onSchool" @cancel="showSchool = false" />
+            </van-popup>
+            <van-field v-model="messInfo.faculty" name="所在院系" label="所在院系" placeholder="所在院系" />
+            <van-field v-model="messInfo.major" name="所在专业" label="所在专业" placeholder="所在专业" />
+            <van-field v-model="messInfo.entry_year" name="入学年份" label="入学年份" placeholder="入学年份" />
+            <van-field v-model="messInfo.finish_year" name="毕业年份" label="毕业年份" placeholder="毕业年份" />
+            <van-field v-model="messInfo.school_job" name="在校所担当职务" label="在校所担当职务" placeholder="在校所担当职务" />
+            <van-field v-model="messInfo.email" name="e-mail" label="e-mail" placeholder="e-mail" />
+            <van-field v-model="messInfo.family_place" name="户口所在地" label="户口所在地" placeholder="户口所在地" />
+            <div style="margin: 16px;">
+              <van-button round block type="info" native-type="submit">
+                保存
+              </van-button>
+            </div>
+          </van-form>
+        </van-col>
       </el-col>
       </el-col>
     </el-row>
     </el-row>
   </div>
   </div>
@@ -142,6 +180,8 @@
 
 
 <script>
 <script>
 import { mapState, createNamespacedHelpers, mapGetters } from 'vuex';
 import { mapState, createNamespacedHelpers, mapGetters } from 'vuex';
+const { mapActions: mapNation } = createNamespacedHelpers('nation');
+const { mapActions: school } = createNamespacedHelpers('school');
 export default {
 export default {
   name: 'studentInfo',
   name: 'studentInfo',
   props: {
   props: {
@@ -152,12 +192,46 @@ export default {
   components: {},
   components: {},
   data: () => ({
   data: () => ({
     circleUrl: require('@/assets/circle.png'),
     circleUrl: require('@/assets/circle.png'),
+    nationList: [],
+    showPicker: false,
+    school: [],
+    schoolList: [],
+    showSchool: false,
   }),
   }),
-  created() {},
+  created() {
+    this.otherList();
+  },
   computed: {
   computed: {
     ...mapState(['user']),
     ...mapState(['user']),
   },
   },
-  methods: {},
+  methods: {
+    ...mapNation({ nation: 'query' }),
+    ...school({ schoolQuery: 'query' }),
+    async otherList() {
+      const res = await this.nation();
+      var arr = res.data.map(item => item.name);
+      if (this.$checkRes(res)) this.$set(this, `nationList`, arr);
+      const school = await this.schoolQuery();
+      if (this.$checkRes(res)) this.$set(this, `school`, school.data);
+      var newsSchool = school.data.map(item => item.name);
+      if (this.$checkRes(res)) this.$set(this, `schoolList`, newsSchool);
+    },
+    // 民族
+    onConfirm(value) {
+      this.$set(this.messInfo, `nation`, value);
+      this.showPicker = false;
+    },
+    // 学校
+    onSchool(value) {
+      this.$set(this.messInfo, `school_name`, value);
+      var arr = this.school.filter(item => item.name === value);
+      this.$set(this.messInfo, `schid`, arr[0].code);
+      this.showSchool = false;
+    },
+    onSubmit() {
+      this.$emit('onSubmit', { data: this.messInfo });
+    },
+  },
 };
 };
 </script>
 </script>
 
 

+ 4 - 0
src/store/index.js

@@ -22,6 +22,8 @@ import dept from '@frame/store/dept';
 import login from '@frame/store/login';
 import login from '@frame/store/login';
 import sethead from '@frame/store/sethead';
 import sethead from '@frame/store/sethead';
 import bedroom from '@frame/store/bedroom';
 import bedroom from '@frame/store/bedroom';
+import nation from '@frame/store/nation';
+import school from '@frame/store/school';
 
 
 import * as ustate from '@frame/store/user/state';
 import * as ustate from '@frame/store/user/state';
 import * as umutations from '@frame/store/user/mutations';
 import * as umutations from '@frame/store/user/mutations';
@@ -55,5 +57,7 @@ export default new Vuex.Store({
     sethead,
     sethead,
     util,
     util,
     bedroom,
     bedroom,
+    nation,
+    school,
   },
   },
 });
 });

+ 13 - 11
src/views/user/personalDetail.vue

@@ -5,9 +5,8 @@
         <el-col :span="24" class="top">
         <el-col :span="24" class="top">
           <NavBar v-show="navShow" :title="title" :isleftarrow="isleftarrow"> </NavBar>
           <NavBar v-show="navShow" :title="title" :isleftarrow="isleftarrow"> </NavBar>
         </el-col>
         </el-col>
-
         <el-col :span="24" class="main">
         <el-col :span="24" class="main">
-          <studentInfo :messInfo="messInfo" :teainfo="teainfo" :jianshiinfo="jianshiinfo"></studentInfo>
+          <studentInfo :messInfo="messInfo" @onSubmit="onSubmit"></studentInfo>
         </el-col>
         </el-col>
       </el-col>
       </el-col>
     </el-row>
     </el-row>
@@ -17,9 +16,7 @@
 <script>
 <script>
 import NavBar from '@/layout/common/topInfo.vue';
 import NavBar from '@/layout/common/topInfo.vue';
 import studentInfo from '@/layout/user/studentInfo.vue';
 import studentInfo from '@/layout/user/studentInfo.vue';
-
 import { mapState, createNamespacedHelpers, mapGetters } from 'vuex';
 import { mapState, createNamespacedHelpers, mapGetters } from 'vuex';
-
 const { mapActions: mapStudent } = createNamespacedHelpers('student');
 const { mapActions: mapStudent } = createNamespacedHelpers('student');
 const { mapActions: mapDept } = createNamespacedHelpers('dept');
 const { mapActions: mapDept } = createNamespacedHelpers('dept');
 export default {
 export default {
@@ -30,13 +27,10 @@ export default {
     studentInfo, //学生详细信息
     studentInfo, //学生详细信息
   },
   },
   data: () => ({
   data: () => ({
-    messInfo: {},
-    teainfo: {},
-    stulist: {},
     title: '',
     title: '',
     isleftarrow: '',
     isleftarrow: '',
     navShow: true,
     navShow: true,
-    jianshiinfo: {},
+    messInfo: {},
   }),
   }),
   created() {
   created() {
     this.searchInfo();
     this.searchInfo();
@@ -58,14 +52,22 @@ export default {
     },
     },
   },
   },
   methods: {
   methods: {
-    ...mapStudent({ studentQuery: 'query', studentFetch: 'fetch' }),
+    ...mapStudent({ studentQuery: 'query', studentFetch: 'fetch', studentUpdate: 'update' }),
     ...mapDept({ deptFetch: 'fetch' }),
     ...mapDept({ deptFetch: 'fetch' }),
-
-    // 1:班主任,4:学生
     async searchInfo() {
     async searchInfo() {
       const res = await this.studentFetch(this.id);
       const res = await this.studentFetch(this.id);
       this.$set(this, `messInfo`, res.data);
       this.$set(this, `messInfo`, res.data);
     },
     },
+    async onSubmit({ data }) {
+      data.status = '0';
+      const res = await this.studentUpdate(data);
+      if (this.$checkRes(res)) {
+        this.$notify({
+          message: '修改信息成功,等待确认',
+          type: 'success',
+        });
+      }
+    },
   },
   },
 };
 };
 </script>
 </script>