Quellcode durchsuchen

fiex:新增需求-word文档导入功能

Tang vor 3 Jahren
Ursprung
Commit
4df914d761

+ 8 - 0
src/newApi/paperquestion.js

@@ -55,4 +55,12 @@ export default {
             data
         })
     },
+    //导入题目Word模板列表
+    bankquestionimportWordQuestionList(data) {
+        return request({
+            url: '/bank/question/importWordQuestionList',
+            method: 'post',
+            data
+        })
+    },
 }

+ 30 - 1
src/views/resource/bankManagement/testPaperManagement/addPaper/topicAddPaper/index.vue

@@ -14,6 +14,11 @@
         @editInfo="editInfo"
         @emitData="emitData"
       >
+      <template slot="customize">
+          <el-button size="medium" @click="dialogDRword = true" type="success"
+            >Word批量导入</el-button
+          >
+        </template>
         <template slot="btn" slot-scope="props">
           <el-button
             type="text"
@@ -37,6 +42,28 @@
           >确定</el-button
         >
       </div>
+      <el-dialog
+        :visible.sync="dialogDRword"
+        :append-to-body="true"
+        width="780px"
+        :show-close="false"
+        :close-on-click-modal="false"
+      >
+        <div slot="title" class="hearders">
+          <div class="leftTitle">批量导入</div>
+          <div class="rightBoxs">
+            <img
+              src="@/assets/images/Close@2x.png"
+              alt=""
+              @click="dialogDRword = false"
+            />
+          </div>
+        </div>
+        <word-pop ref="wordpop" />
+        <span slot="footer" class="dialog-footer">
+          <el-button @click="dialogDRword = false">取 消</el-button>
+        </span>
+      </el-dialog>
       <el-dialog
         width="1080px"
         :visible.sync="innerVisiblePaperTopic"
@@ -658,11 +685,13 @@ import pagination from "@/components/pagination";
 import tableList from "@/components/tableList";
 import busIns from "@/components/busIns";
 import questionBank from "@/components/questionBank";
+import wordPop from "../../editPaper/topicEditPaper/wordPop.vue";
 export default {
   name: "TopicAddPaper",
-  components: { searchBoxNew, pagination, tableList, busIns, questionBank },
+  components: { searchBoxNew, pagination, tableList, busIns, questionBank,wordPop },
   data() {
     return {
+      dialogDRword: false,
       disabledBtn: false,
       showHide: false,
       activeName: "second",

+ 37 - 1
src/views/resource/bankManagement/testPaperManagement/editPaper/topicEditPaper/index.vue

@@ -10,6 +10,11 @@
         @editInfo="editInfo"
         @emitData="emitData"
       >
+        <template slot="customize">
+          <el-button size="medium" @click="dialogDRword = true" type="success"
+            >Word批量导入</el-button
+          >
+        </template>
         <template slot="btn" slot-scope="props">
           <el-button
             type="text"
@@ -41,6 +46,28 @@
           >恢复草稿</el-button
         >
       </div>
+      <el-dialog
+        :visible.sync="dialogDRword"
+        :append-to-body="true"
+        width="780px"
+        :show-close="false"
+        :close-on-click-modal="false"
+      >
+        <div slot="title" class="hearders">
+          <div class="leftTitle">批量导入</div>
+          <div class="rightBoxs">
+            <img
+              src="@/assets/images/Close@2x.png"
+              alt=""
+              @click="dialogDRword = false"
+            />
+          </div>
+        </div>
+        <word-pop ref="wordpop" />
+        <span slot="footer" class="dialog-footer">
+          <el-button @click="dialogDRword = false">取 消</el-button>
+        </span>
+      </el-dialog>
       <el-dialog
         width="1080px"
         :visible.sync="innerVisiblePaperTopic"
@@ -662,10 +689,19 @@ import pagination from "@/components/pagination";
 import tableList from "@/components/tableList";
 import busIns from "@/components/busIns";
 import questionBank from "@/components/questionBank";
+import wordPop from "./wordPop.vue";
 export default {
-  components: { searchBoxNew, pagination, tableList, busIns, questionBank },
+  components: {
+    searchBoxNew,
+    pagination,
+    tableList,
+    busIns,
+    questionBank,
+    wordPop,
+  },
   data() {
     return {
+      dialogDRword: false,
       disabledBtn: false,
       showHide: false,
       formList: [

+ 236 - 0
src/views/resource/bankManagement/testPaperManagement/editPaper/topicEditPaper/wordPop.vue

@@ -0,0 +1,236 @@
+<template>
+  <div>
+    <div class="swq">
+      <img
+        style="width: 182px; height: 168px"
+        src="@/assets/images/dr.png"
+        alt=""
+      />
+    </div>
+    <div style="padding-left: 100px">
+      <p>第一步:下载word导入模板</p>
+      <p style="padding-left: 50px">
+        <i class="el-icon-upload"></i
+        ><span class="dowmStys" @click="getDowm">下载模板</span>
+      </p>
+      <p>第二步:点击“上传Word”完成导入</p>
+      <label
+        for="mobles"
+        style="margin-left: 50px"
+        class="el-button el-button--primary el-button--mini"
+        >上传Word</label
+      ><input
+        style="display: none"
+        type="file"
+        id="mobles"
+        ref="input1"
+        @change="importMobleadd"
+      />
+    </div>
+    <el-dialog
+      append-to-body
+      :visible.sync="dialogERROR"
+      width="660px"
+      :show-close="false"
+      :close-on-click-modal="false"
+    >
+      <div slot="title" class="hearders">
+        <div class="leftTitle">提示</div>
+        <div class="rightBoxs">
+          <img
+            src="@/assets/images/Close@2x.png"
+            alt=""
+            @click="dialogERROR = false"
+          />
+        </div>
+      </div>
+      <div>
+        <h4 style="margin-top: 0px; font-weight: bold; text-align: center">
+          导入失败原因
+        </h4>
+        <el-input
+          readonly
+          type="textarea"
+          :autosize="{ minRows: 6, maxRows: 24 }"
+          v-model="errorData"
+        >
+        </el-input>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="dialogERROR = false">确定</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import * as baseUrls from "@/utils/request.js";
+export default {
+  data() {
+    return {
+      errorData: "",
+      formData: {
+        eduId: "",
+        businessId: "",
+        subjectId: "",
+        projectId: "",
+      },
+      dialogERROR: false,
+    };
+  },
+  methods: {
+    getDowm() {
+      let url =
+        baseUrls.BASE_IMG_URL + "/oss/images/file/20220317/1647486041811.docx";
+      let link = document.createElement("a");
+      let fileName = "导入模板" + ".docx";
+      document.body.appendChild(link);
+      link.href = url;
+      link.dowmload = fileName;
+      link.click();
+      link.remove();
+    },
+    importMobleadd(e) {
+      var self = this;
+      let arr = this.$parent.$parent.businObj;
+      var file = e.target.files[0];
+      let formData = new FormData();
+      formData.append("file", file);
+      formData.append("eduId", arr.educationTypeId);
+      formData.append("projectId", arr.projectId);
+      formData.append("businessId", arr.businessId);
+      formData.append("subjectId", arr.subjectId);
+      this.$api
+        .bankquestionimportWordQuestionList(formData)
+        .then((res) => {
+          if (res.code === 200) {
+            self.$message.success("导入成功");
+            let numList = self.$parent.$parent.tableData;
+            if (numList.length) {
+              let numIndex = 0;
+              numList.forEach((items) => {
+                if (items.sort > numIndex) {
+                  numIndex = items.sort;
+                }
+              });
+              res.data.forEach((items, indexs) => {
+                items.sort = 1 + numIndex++;
+              });
+            } else {
+              res.data.forEach((items, indexs) => {
+                items.sort = 1 + indexs++;
+              });
+            }
+            self.$parent.$parent.tableData =
+              self.$parent.$parent.tableData.concat(res.data);
+            self.$parent.$parent.dialogDRword = false;
+          }
+        })
+        .finally(() => {
+          e.target.value = "";
+        });
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+/deep/.el-button {
+  border-radius: 8px;
+}
+/deep/.el-dialog {
+  border-radius: 8px;
+  .el-dialog__header {
+    padding: 0;
+    .hearders {
+      height: 40px;
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      padding: 0px 18px 0px 20px;
+      border-bottom: 1px solid #e2e2e2;
+      .leftTitle {
+        font-size: 14px;
+        font-weight: bold;
+        color: #2f4378;
+      }
+      .rightBoxs {
+        display: flex;
+        align-items: center;
+        img {
+          width: 14px;
+          height: 14px;
+          margin-left: 13px;
+          cursor: pointer;
+        }
+      }
+    }
+  }
+  .el-dialog__footer {
+    padding: 0;
+    .dialog-footer {
+      padding: 0px 40px;
+      height: 70px;
+      border-top: 1px solid #e2e2e2;
+      display: flex;
+      align-items: center;
+      justify-content: flex-end;
+    }
+  }
+}
+
+.swq {
+  text-align: center;
+  border-bottom: 1px solid #eee;
+}
+.dowmStys {
+  color: blue;
+  cursor: pointer;
+}
+.imgBox {
+  width: 100%;
+  // height: 210px;
+  border: 1px solid #e2e2e2;
+  border-radius: 8px;
+  padding: 8px 8px 3px;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  .imgLabel {
+    flex: 1;
+    width: 100%;
+    border: 1px dotted #e2e2e2;
+    color: #999;
+    font-size: 14px;
+    cursor: pointer;
+    border-radius: 8px;
+    .msPhoto {
+      display: flex;
+      justify-content: center;
+      align-items: center;
+      max-width: 100%;
+      max-height: 270px;
+      img {
+        max-width: 100%;
+        max-height: 270px;
+      }
+    }
+    .imgbbx {
+      display: flex;
+      flex-direction: column;
+      align-items: center;
+      justify-content: center;
+      width: 100%;
+      height: 100%;
+      i {
+        font-weight: bold;
+        margin: 14px 0;
+        font-size: 24px;
+      }
+    }
+  }
+  p {
+    margin: 5px 0px;
+  }
+}
+</style>

+ 88 - 0
src/views/resource/bankManagement/topicManagement/excelPop.vue

@@ -0,0 +1,88 @@
+<template>
+  <div>
+    <div class="swq">
+      <img
+        style="width: 182px; height: 168px"
+        src="@/assets/images/dr.png"
+        alt=""
+      />
+    </div>
+    <div style="padding-left: 100px">
+      <p>第一步:下载excel导入模板</p>
+      <p style="padding-left: 50px">
+        <i class="el-icon-upload"></i
+        ><span class="dowmStys" @click="getDowm">下载模板</span>
+      </p>
+      <p>第二步:点击“上传Excel”</p>
+      <label for="mobles2" class="el-button el-button--primary el-button--mini"
+        >上传Excel</label
+      ><input
+        style="display: none"
+        type="file"
+        id="mobles2"
+        ref="input2"
+        @change="importMobleadd"
+      />
+    </div>
+  </div>
+</template>
+
+<script>
+import * as baseUrls from "@/utils/request.js";
+export default {
+  data() {
+    return {};
+  },
+  methods: {
+    getDowm() {
+      let url =
+        baseUrls.BASE_IMG_URL + "/oss/images/file/20220317/1647479718953.docx";
+      let link = document.createElement("a");
+      let fileName = "导入模板" + ".docx";
+      document.body.appendChild(link);
+      link.href = url;
+      link.dowmload = fileName;
+      link.click();
+      link.remove();
+    },
+    importMobleadd(e) {
+      var self = this;
+      var file = e.target.files[0];
+      let formData = new FormData();
+      formData.append("file", file);
+      this.$api
+        .importDatabankquestion(formData)
+        .then((res) => {
+          if (res.msg == "操作成功") {
+            self.$message.success("导入成功");
+          } else {
+            let url = baseUrls.baseURL + "common/download?fileName=" + res.msg;
+            let link = document.createElement("a");
+            let fileName = "导入模板" + ".xlsx";
+            document.body.appendChild(link);
+            link.href = url;
+            link.dowmload = fileName;
+            link.click();
+            link.remove();
+            self.$message.warning("导入有误,请打开文档查看错误原因");
+          }
+        })
+        .finally(() => {
+          e.target.value = "";
+          self.$emit("search",2)
+        });
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.swq {
+  text-align: center;
+  border-bottom: 1px solid #eee;
+}
+.dowmStys {
+  color: blue;
+  cursor: pointer;
+}
+</style>

+ 70 - 52
src/views/resource/bankManagement/topicManagement/index.vue

@@ -16,20 +16,11 @@
       @editInfo="editInfo"
     >
       <template slot="customize">
-        <el-button size="medium" @click="dowmModel" type="warning"
-          >下载模板</el-button
+        <el-button size="medium" @click="dialogDRword = true" type="success"
+          >Word批量导入</el-button
+        ><el-button size="medium" @click="dialogDRexcel = true" type="success"
+          >Excel批量导入</el-button
         >
-        <label
-          for="mobles"
-          class="el-button el-button--success"
-          style="margin-right: 10px; padding: 10px 20px"
-          >导入模板</label
-        ><input
-          style="display: none"
-          type="file"
-          id="mobles"
-          @change="importMoble"
-        />
       </template>
       <template slot="btn" slot-scope="props">
         <el-button type="text" @click="addClick(props.scope.row, 0)"
@@ -46,6 +37,51 @@
       @handleCurrentChange="handleCurrentChange"
     />
     <!-- ------------------- -->
+    <el-dialog
+      @closed="clearData"
+      :visible.sync="dialogDRword"
+      :append-to-body="true"
+      width="780px"
+      :show-close="false"
+      :close-on-click-modal="false"
+    >
+      <div slot="title" class="hearders">
+        <div class="leftTitle">批量导入</div>
+        <div class="rightBoxs">
+          <img
+            src="@/assets/images/Close@2x.png"
+            alt=""
+            @click="dialogDRword = false"
+          />
+        </div>
+      </div>
+      <word-pop @search="search" ref="wordpop" />
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="dialogDRword = false">取 消</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog
+      :visible.sync="dialogDRexcel"
+      :append-to-body="true"
+      width="780px"
+      :show-close="false"
+      :close-on-click-modal="false"
+    >
+      <div slot="title" class="hearders">
+        <div class="leftTitle">批量导入</div>
+        <div class="rightBoxs">
+          <img
+            src="@/assets/images/Close@2x.png"
+            alt=""
+            @click="dialogDRexcel = false"
+          />
+        </div>
+      </div>
+      <excel-pop @search="search" />
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="dialogDRexcel = false">取 消</el-button>
+      </span>
+    </el-dialog>
     <el-dialog
       @closed="loadingClose"
       width="1080px"
@@ -209,17 +245,28 @@
 </template>
 
 <script>
-import * as baseUrls from "@/utils/request.js";
 import searchBoxNew from "@/components/searchBoxNew";
 import tableList from "@/components/tableList";
 import pagination from "@/components/pagination";
 import busIns from "@/components/busIns";
 import questionBank from "@/components/questionBank";
+import wordPop from "./wordPop.vue";
+import excelPop from "./excelPop.vue";
 export default {
-  components: { questionBank, busIns, tableList, pagination, searchBoxNew },
+  components: {
+    questionBank,
+    busIns,
+    tableList,
+    pagination,
+    searchBoxNew,
+    wordPop,
+    excelPop,
+  },
   name: "TopicManagement",
   data() {
     return {
+      dialogDRword: false,
+      dialogDRexcel: false,
       disabledBtn: false,
       statusHide: false,
       loading: false, //当前表单加载是否加载动画
@@ -408,46 +455,17 @@ export default {
     this.search();
   },
   methods: {
+    clearData() {
+      this.$refs.wordpop.formData = {
+        eduId: "",
+        businessId: "",
+        subjectId: "",
+        projectId: "",
+      };
+    },
     loadingClose() {
       this.disabledBtn = false;
     },
-    dowmModel() {
-      let url = baseUrls.BASE_IMG_URL + "/oss/images/file/20220307/1646623385198.xlsx";
-      let link = document.createElement("a");
-      let fileName = "导入模板" + ".xlsx";
-      document.body.appendChild(link);
-      link.href = url;
-      link.dowmload = fileName;
-      link.click();
-      link.remove();
-    },
-    importMoble(e) {
-      var self = this;
-      var file = e.target.files[0];
-      let formData = new FormData();
-      formData.append("file", file);
-      this.$api
-        .importDatabankquestion(formData)
-        .then((res) => {
-          if (res.msg == "操作成功") {
-            self.$message.success("导入成功");
-          } else {
-            let url = baseUrls.baseURL + "common/download?fileName=" + res.msg;
-            let link = document.createElement("a");
-            let fileName = "导入模板" + ".xlsx";
-            document.body.appendChild(link);
-            link.href = url;
-            link.dowmload = fileName;
-            link.click();
-            link.remove();
-            self.$message.warning("导入有误,请打开文档查看错误原因");
-          }
-        })
-        .finally(() => {
-          self.search();
-          e.target.value = "";
-        });
-    },
     editInfo(v) {
       this.addClick(v, 0);
     },

+ 314 - 0
src/views/resource/bankManagement/topicManagement/wordPop.vue

@@ -0,0 +1,314 @@
+<template>
+  <div>
+    <div class="swq">
+      <img
+        style="width: 182px; height: 168px"
+        src="@/assets/images/dr.png"
+        alt=""
+      />
+    </div>
+    <div style="padding-left: 100px">
+      <p>第一步:下载word导入模板</p>
+      <p style="padding-left: 50px">
+        <i class="el-icon-upload"></i
+        ><span class="dowmStys" @click="getDowm">下载模板</span>
+      </p>
+      <p>第二步:选择必填项</p>
+      <div>
+        <!-- 教育类型 -->
+        <el-select
+          v-model="formData.eduId"
+          placeholder="请选择教育类型(必填)"
+          size="mini"
+          @change="changeEducationType"
+        >
+          <el-option
+            v-for="(items, indexs) in educationType"
+            :key="indexs"
+            :label="items.educationName"
+            :value="items.id"
+          ></el-option>
+        </el-select>
+        <!-- 业务层次 -->
+        <el-select
+          v-if="formData.eduId"
+          v-model="formData.businessId"
+          placeholder="请选择业务层次(必填)"
+          size="mini"
+          @change="changeBusinessLevel"
+        >
+          <el-option
+            v-for="(items, indexs) in newBusinessLevel"
+            :key="indexs"
+            :label="items.projectName + '-' + items.businessName"
+            :value="items.id"
+          ></el-option>
+        </el-select>
+        <!-- 科目 -->
+        <el-select
+          v-if="formData.businessId"
+          v-model="formData.subjectId"
+          placeholder="请选择科目(必填)"
+          size="mini"
+        >
+          <el-option
+            v-for="(items, indexs) in newSujectType"
+            :key="indexs"
+            :label="items.subjectName"
+            :value="items.id"
+          ></el-option>
+        </el-select>
+      </div>
+      <p>
+        第三步:(批量新增):点击“上传Word”完成导入<span
+          v-if="!(formData.eduId && formData.businessId && formData.subjectId)"
+          style="color: red; margin-left: 14px"
+          >请完成第二步选择必填项</span
+        >
+      </p>
+      <label
+        v-if="formData.eduId && formData.businessId && formData.subjectId"
+        for="mobles"
+        class="el-button el-button--primary el-button--mini"
+        >上传Word</label
+      ><input
+        style="display: none"
+        type="file"
+        id="mobles"
+        ref="input1"
+        @change="importMobleadd"
+      />
+    </div>
+    <el-dialog
+      append-to-body
+      :visible.sync="dialogERROR"
+      width="660px"
+      :show-close="false"
+      :close-on-click-modal="false"
+    >
+      <div slot="title" class="hearders">
+        <div class="leftTitle">提示</div>
+        <div class="rightBoxs">
+          <img
+            src="@/assets/images/Close@2x.png"
+            alt=""
+            @click="dialogERROR = false"
+          />
+        </div>
+      </div>
+      <div>
+        <h4 style="margin-top: 0px; font-weight: bold; text-align: center">
+          导入失败原因
+        </h4>
+        <el-input
+          readonly
+          type="textarea"
+          :autosize="{ minRows: 6, maxRows: 24 }"
+          v-model="errorData"
+        >
+        </el-input>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="dialogERROR = false">确定</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { mapGetters } from "vuex";
+import * as baseUrls from "@/utils/request.js";
+export default {
+  data() {
+    return {
+      newBusinessLevel: [],
+      newSujectType: [],
+      errorData: "",
+      formData: {
+        eduId: "",
+        businessId: "",
+        subjectId: "",
+        projectId: "",
+      },
+      dialogERROR: false,
+    };
+  },
+  computed: {
+    ...mapGetters(["educationType"]),
+  },
+  watch: {
+    "formData.eduId"() {
+      this.formData.businessId = "";
+      this.formData.projectId = "";
+    },
+    "formData.businessId"(v) {
+      if (v) {
+        for (let i = 0; i < this.newBusinessLevel.length; i++) {
+          if (this.newBusinessLevel[i].id === v) {
+            this.formData.projectId = this.newBusinessLevel[i].projectId;
+            break;
+          }
+          console.log(1);
+        }
+      }
+      this.formData.subjectId = "";
+    },
+  },
+  methods: {
+    changeEducationType(v) {
+      this.$api
+        .inquirebusinessList({ status: 1, educationId: v })
+        .then((res) => {
+          this.newBusinessLevel = res.rows;
+        });
+    },
+    changeBusinessLevel(v) {
+      this.$api
+        .inquireCourseSubject({ status: 1, businessId: v })
+        .then((res) => {
+          this.newSujectType = res.rows;
+        });
+    },
+    getDowm() {
+      let url =
+        baseUrls.BASE_IMG_URL + "/oss/images/file/20220317/1647486041811.docx";
+      let link = document.createElement("a");
+      let fileName = "导入模板" + ".docx";
+      document.body.appendChild(link);
+      link.href = url;
+      link.dowmload = fileName;
+      link.click();
+      link.remove();
+    },
+    importMobleadd(e) {
+      var self = this;
+      var file = e.target.files[0];
+      let formData = new FormData();
+      formData.append("file", file);
+      formData.append("eduId", this.formData.eduId);
+      formData.append("projectId", this.formData.projectId);
+      formData.append("businessId", this.formData.businessId);
+      formData.append("subjectId", this.formData.subjectId);
+      this.$api
+        .bankquestionimportWordData(formData)
+        .then((res) => {
+          if (res.code === 200) {
+            if (!res.msg) {
+              self.$message.success("导入成功");
+              this.$parent.$parent.dialogDRword = false;
+            } else {
+              self.errorData = res.msg;
+              self.dialogERROR = true;
+            }
+          }
+        })
+        .finally(() => {
+          e.target.value = "";
+          self.$emit("search", 2);
+        });
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+
+/deep/.el-button {
+  border-radius: 8px;
+}
+/deep/.el-dialog {
+  border-radius: 8px;
+  .el-dialog__header {
+    padding: 0;
+    .hearders {
+      height: 40px;
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      padding: 0px 18px 0px 20px;
+      border-bottom: 1px solid #e2e2e2;
+      .leftTitle {
+        font-size: 14px;
+        font-weight: bold;
+        color: #2f4378;
+      }
+      .rightBoxs {
+        display: flex;
+        align-items: center;
+        img {
+          width: 14px;
+          height: 14px;
+          margin-left: 13px;
+          cursor: pointer;
+        }
+      }
+    }
+  }
+  .el-dialog__footer {
+    padding: 0;
+    .dialog-footer {
+      padding: 0px 40px;
+      height: 70px;
+      border-top: 1px solid #e2e2e2;
+      display: flex;
+      align-items: center;
+      justify-content: flex-end;
+    }
+  }
+}
+
+.swq {
+  text-align: center;
+  border-bottom: 1px solid #eee;
+}
+.dowmStys {
+  color: blue;
+  cursor: pointer;
+}
+.imgBox {
+  width: 100%;
+  // height: 210px;
+  border: 1px solid #e2e2e2;
+  border-radius: 8px;
+  padding: 8px 8px 3px;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  .imgLabel {
+    flex: 1;
+    width: 100%;
+    border: 1px dotted #e2e2e2;
+    color: #999;
+    font-size: 14px;
+    cursor: pointer;
+    border-radius: 8px;
+    .msPhoto {
+      display: flex;
+      justify-content: center;
+      align-items: center;
+      max-width: 100%;
+      max-height: 270px;
+      img {
+        max-width: 100%;
+        max-height: 270px;
+      }
+    }
+    .imgbbx {
+      display: flex;
+      flex-direction: column;
+      align-items: center;
+      justify-content: center;
+      width: 100%;
+      height: 100%;
+      i {
+        font-weight: bold;
+        margin: 14px 0;
+        font-size: 24px;
+      }
+    }
+  }
+  p {
+    margin: 5px 0px;
+  }
+}
+</style>