Jelajahi Sumber

Merge branch 'master' of http://git.dayaedu.com/molingzhide/dy-admin-manager

mo 5 tahun lalu
induk
melakukan
66960e95bb

+ 195 - 13
src/views/categroyManager/insideSetting/addressManager.vue

@@ -2,9 +2,9 @@
   <div class='m-container'>
     <h2>分部教学点</h2>
     <div class="m-core">
-      <div class='newBand'>新建</div>
+      <div @click="teachingStatus = true" class='newBand'>新建</div>
       <!-- 搜索类型 -->
-      <el-form :inline="true"
+      <!-- <el-form :inline="true"
                class="searchForm"
                v-model="searchForm">
         <el-form-item>
@@ -18,21 +18,21 @@
           <el-input suffix-icon="el-icon-search"
                     placeholder="请输入搜索内容"></el-input>
         </el-form-item>
-      </el-form>
+      </el-form> -->
       <!-- 查询列表 -->
-      <div class="searchWrap">
+      <!-- <div class="searchWrap">
         <p>查询条件:</p>
         <div class="searchItem"
              @click="closeSearch(item)"
-             v-for="(item,index) in searchLsit">
+             v-for="(item,index) in searchLsit" :key="index">
           {{ item.key }}
           <i class="el-icon-close"></i>
         </div>
-      </div>
+      </div> -->
       <!-- 列表 -->
       <div class="tableWrap">
         <el-table :data='tableList'>
-          <el-table-column align='center'
+          <el-table-column align='center' width="55"
                            label="编号">
           </el-table-column>
           <el-table-column align='center'
@@ -54,41 +54,223 @@
                            label="操作">
           </el-table-column>
         </el-table>
-        <pagination :total="rules.total"
-                    :page.sync="rules.page"
-                    :limit.sync="rules.limit"
-                    :page-sizes="rules.page_size"
+        <pagination :total="pageInfo.total"
+                    :page.sync="pageInfo.page"
+                    :limit.sync="pageInfo.limit"
+                    :page-sizes="pageInfo.page_size"
                     @pagination="getList" />
       </div>
     </div>
-  </div>
+
+    <el-dialog title="添加教学点" :visible.sync="teachingStatus" width="500px">
+      <el-form :model="form" :rules="rules" ref="ruleForm">
+        <el-form-item label="教学点名称" prop="name" :label-width="formLabelWidth">
+          <el-input v-model="form.name" autocomplete="off"></el-input>
+        </el-form-item>
+        <el-form-item label="教学点来源" prop="source" :label-width="formLabelWidth">
+          <el-select v-model="form.source">
+            <el-option label="合作单位" value="1"></el-option>
+            <el-option label="租赁" value="2"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item v-if="form.source == 1" prop="company" label="合作单位" :label-width="formLabelWidth">
+          <el-select v-model="form.company">
+            <el-option label="合作单位" value="1"></el-option>
+            <el-option label="租赁" value="2"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item v-if="form.source == 2" prop="fee" label="费用" :label-width="formLabelWidth">
+          <el-input v-model="form.fee" autocomplete="off"></el-input>
+        </el-form-item>
+        <el-form-item v-if="form.source == 2" prop="address" :show-message="addressMessage" label="上课地点" :label-width="formLabelWidth">
+          <el-input class="text-address" v-model="form.address" :disabled="true">
+            <el-button slot="append" @click="addMap" type="primary" icon="el-icon-plus">选择</el-button>
+          </el-input>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="onTeachingCancel('ruleForm')">取 消</el-button>
+        <el-button type="primary" @click="onTeachingSubmit('ruleForm')">确 定</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog title="选择地图" custom-class="map-container" :visible.sync="mapStatus" width="800px">
+      <el-amap-search-box class="search-box" :search-option="searchOption" :on-search-result="onSearchResult"></el-amap-search-box>
+      <el-amap :zoom="zoom" :plugin="plugin" :center="center">
+          <el-amap-marker :events="markerEvents()" v-for="(marker, index) in markers" :key="index" :position="marker" ></el-amap-marker>
+      </el-amap>
+    </el-dialog>
   </div>
 </template>
 <script>
 import pagination from '@/components/Pagination/index'
+// 地图
+(function () {
+let func = EventTarget.prototype.addEventListener;
+let supportsPassive = false
+try {
+  let opts = Object.defineProperty({}, 'passive', {
+    get: function() {
+    supportsPassive = true;
+    }
+  })
+  document.addEventListener("testPassive", null, opts);
+  document.removeEventListener('testPassive', null, opts);
+} catch(e) {}
+
+EventTarget.prototype.addEventListener = function (type, fn, capture) {
+  this.func = func;
+  capture = capture instanceof Object ? capture : {};
+  capture.passive = supportsPassive;
+  this.func(type, fn, capture);
+};
+}());
 export default {
   components: { pagination },
   name: 'adminManager',
   data () {
+    let self = this
     return {
       searchForm: {
         status: ''
       },
       searchLsit: [],
       tableList: [],
-      rules: {
+      pageInfo: {
         // 分页规则
         limit: 10, // 限制显示条数
         page: 1, // 当前页
         total: 0, // 总条数
         page_size: [10, 20, 40, 50] // 选择限制显示条数
       },
+      teachingStatus: false, // 添加教学点 
+      formLabelWidth: '100px',
+      addressDetail: {},
+      form: {
+        name: null, // 教学点名称
+        source: null, // 来源
+        fee: null,  // 费用
+        address: null, // 上课地点
+        company: null, // 合作单位
+      },
+      rules: {
+        name: [{ required: true, message: '请输入教学点名称', trigger: 'blur' }],
+        source: [{required: true, message: '请选择教学点来源', trigger: 'change'}],
+        fee: [{ required: true, message: '请输入教学点名称', trigger: 'blur'}],
+        address: [{required: true, message: '请选择上课地点', trigger: 'blur'}],
+        company: [{required: true, message: '请选择合作单位', trigger: 'change'}]
+      },
+      addressMessage: true,
+      mapStatus: false,
+      zoom: 16,
+      center: [114.34371, 30.55939],
+      markers: [],
+      plugin: [],
+      searchOption: {
+          city: '',
+          citylimit: true,
+          pageSize: 1, // 单页显示结果条数
+          pageIndex: 1, // 页码
+          autoFitView: true // 是否自动调整地图视野使绘制的 Marker点都处于视口的可见范围
+      },
     }
   },
   methods: {
+    onTeachingSubmit(formName) { // 添加数据
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          alert('submit!');
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      })
+    },
+    onTeachingCancel(formName) {
+      this.teachingStatus = false
+      this.$refs[formName].clearValidate()
+    },
+    addMap() { // 
+      this.mapStatus = true
+      let poi = this.addressDetail
+      // 获取经纬度
+      if(poi.lnglat) {
+        this.markers = []
+        this.center = [poi.lnglat.lng, poi.lnglat.lat];
+        this.markers.push([poi.lnglat.lng, poi.lnglat.lat])
+      }
+    },
+    onSearchResult(pois) { // 搜索出来的Marker
+      let latSum = 0
+      let lngSum = 0
+      if (pois.length > 0) {
+        pois.forEach(poi => {
+          let {lng, lat} = poi;
+          lngSum += lng;
+          latSum += lat;
+          this.markers.push([poi.lng, poi.lat]);
+        });
+        let center = {
+          lng: lngSum / pois.length,
+          lat: latSum / pois.length
+        };
+        this.center = [center.lng, center.lat];
+      }
+    },
+    markerEvents() { // marker 事件添加
+      let that = this
+      return {
+        click: (e) => {
+          let geocoder = new AMap.Geocoder()
+          geocoder.getAddress(e.lnglat, function(status, result) {
+            if(status === 'complete' && result.regeocode) {
+                result.regeocode.lnglat = e.lnglat
+                that.addressDetail = result.regeocode
+                that.form.address = result.regeocode.formattedAddress
+                that.mapStatus = false
+                that.addressMessage = false
+            } else {
+                that.$message.error('请重新选择地址')
+            }
+          })
+        }
+      }
+    },
     getList () { }
   }
 }
 </script>
 <style lang="scss">
+.el-select {
+  width: auto !important;
+}
+.el-vue-amap-container {
+  width: 100%;
+  height: 50vh !important;
+}
+* {
+  // touch-action: pan-y;
+  touch-action: none;
+}
+.map-container {
+  .el-dialog__body {
+    padding: 0;
+  }
+}
+.el-input-group__append, .el-button--primary {
+  background: #14928a;
+  border-color: #14928a;
+  color: #fff;
+  &:hover, &:active {
+    background: #14928a;
+    border-color: #14928a;
+    color: #FFF;
+  }
+}
+.el-vue-search-box-container {
+  position: absolute !important;
+  left: 10px;
+  margin-top: 10px;
+  z-index: 99999 !important;
+}
+
 </style>

+ 133 - 10
src/views/categroyManager/insideSetting/branchManager.vue

@@ -2,9 +2,9 @@
   <div class='m-container'>
     <h2>合作单位</h2>
     <div class="m-core">
-      <div class='newBand'>新建</div>
+      <div @click="teachingStatus = true" class='newBand'>新建</div>
       <!-- 搜索类型 -->
-      <el-form :inline="true"
+      <!-- <el-form :inline="true"
                class="searchForm"
                v-model="searchForm">
         <el-form-item>
@@ -19,7 +19,6 @@
                     placeholder="请输入搜索内容"></el-input>
         </el-form-item>
       </el-form>
-      <!-- 查询列表 -->
       <div class="searchWrap">
         <p>查询条件:</p>
         <div class="searchItem"
@@ -28,7 +27,7 @@
           {{ item.key }}
           <i class="el-icon-close"></i>
         </div>
-      </div>
+      </div> -->
       <!-- 列表 -->
       <div class="tableWrap">
         <el-table :data='tableList'>
@@ -54,14 +53,45 @@
                            label="操作">
           </el-table-column>
         </el-table>
-        <pagination :total="rules.total"
-                    :page.sync="rules.page"
-                    :limit.sync="rules.limit"
-                    :page-sizes="rules.page_size"
+        <pagination :total="pageInfo.total"
+                    :page.sync="pageInfo.page"
+                    :limit.sync="pageInfo.limit"
+                    :page-sizes="pageInfo.page_size"
                     @pagination="getList" />
       </div>
     </div>
-  </div>
+
+    <el-dialog title="添加合作单位" :visible.sync="teachingStatus" width="500px">
+      <el-form :model="form" :rules="rules" ref="ruleForm">
+        <el-form-item label="单位名称" prop="name" :label-width="formLabelWidth">
+          <el-input v-model="form.name" autocomplete="off"></el-input>
+        </el-form-item>
+        <el-form-item label="联系人" prop="username" :label-width="formLabelWidth">
+          <el-input v-model="form.username" autocomplete="off"></el-input>
+        </el-form-item>
+        <el-form-item label="职位" prop="position" :label-width="formLabelWidth">
+          <el-input v-model="form.position" autocomplete="off"></el-input>
+        </el-form-item>
+        <el-form-item label="手机号" prop="phone" :label-width="formLabelWidth">
+          <el-input v-model="form.phone" autocomplete="off"></el-input>
+        </el-form-item>
+        <el-form-item prop="address" :show-message="addressMessage" label="上课地点" :label-width="formLabelWidth">
+          <el-input class="text-address" v-model="form.address" :disabled="true">
+            <el-button slot="append" @click="addMap" type="primary" icon="el-icon-plus">选择</el-button>
+          </el-input>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="onTeachingCancel('ruleForm')">取 消</el-button>
+        <el-button type="primary" @click="onTeachingSubmit('ruleForm')">确 定</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog title="选择地图" custom-class="map-container" :visible.sync="mapStatus" width="800px">
+      <el-amap-search-box class="search-box" :search-option="searchOption" :on-search-result="onSearchResult"></el-amap-search-box>
+      <el-amap :zoom="zoom" :plugin="plugin" :center="center">
+          <el-amap-marker :events="markerEvents()" v-for="(marker, index) in markers" :key="index" :position="marker" ></el-amap-marker>
+      </el-amap>
+    </el-dialog>
   </div>
 </template>
 <script>
@@ -76,16 +106,109 @@ export default {
       },
       searchLsit: [],
       tableList: [],
-      rules: {
+      pageInfo: {
         // 分页规则
         limit: 10, // 限制显示条数
         page: 1, // 当前页
         total: 0, // 总条数
         page_size: [10, 20, 40, 50] // 选择限制显示条数
       },
+      teachingStatus: false, // 添加教学点 
+      formLabelWidth: '100px',
+      addressDetail: {},
+      form: {
+        name: null, // 教学点名称
+        username: null, // 来源
+        position: null,  // 费用
+        address: null, // 上课地点
+        phone: null, // 合作单位
+      },
+      rules: {
+        name: [{ required: true, message: '请输入教学点名称', trigger: 'blur' }],
+        username: [{required: true, message: '请输入联系人', trigger: 'blur'}],
+        position: [{ required: true, message: '请输入职位', trigger: 'blur'}],
+        address: [{required: true, message: '请选择上课地点', trigger: 'blur'}],
+        phone: [
+          {required: true, message: '请输入手机号', trigger: 'blur'},
+          { type: 'number', message: '手机号必须为数字', min: 11, max: 11}
+        ]
+      },
+      addressMessage: true,
+      mapStatus: false,
+      zoom: 16,
+      center: [114.34371, 30.55939],
+      markers: [],
+      plugin: [],
+      searchOption: {
+          city: '',
+          citylimit: true,
+          pageSize: 1, // 单页显示结果条数
+          pageIndex: 1, // 页码
+          autoFitView: true // 是否自动调整地图视野使绘制的 Marker点都处于视口的可见范围
+      }
     }
   },
   methods: {
+    onTeachingSubmit(formName) { // 添加数据
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          alert('submit!');
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      })
+    },
+    onTeachingCancel(formName) {
+      this.teachingStatus = false
+      this.$refs[formName].clearValidate()
+    },
+    addMap() { // 
+      this.mapStatus = true
+      let poi = this.addressDetail
+      // 获取经纬度
+      if(poi.lnglat) {
+        this.markers = []
+        this.center = [poi.lnglat.lng, poi.lnglat.lat];
+        this.markers.push([poi.lnglat.lng, poi.lnglat.lat])
+      }
+    },
+    onSearchResult(pois) { // 搜索出来的Marker
+      let latSum = 0
+      let lngSum = 0
+      if (pois.length > 0) {
+        pois.forEach(poi => {
+          let {lng, lat} = poi;
+          lngSum += lng;
+          latSum += lat;
+          this.markers.push([poi.lng, poi.lat]);
+        });
+        let center = {
+          lng: lngSum / pois.length,
+          lat: latSum / pois.length
+        };
+        this.center = [center.lng, center.lat];
+      }
+    },
+    markerEvents() { // marker 事件添加
+      let that = this
+      return {
+        click: (e) => {
+          let geocoder = new AMap.Geocoder()
+          geocoder.getAddress(e.lnglat, function(status, result) {
+            if(status === 'complete' && result.regeocode) {
+                result.regeocode.lnglat = e.lnglat
+                that.addressDetail = result.regeocode
+                that.form.address = result.regeocode.formattedAddress
+                that.mapStatus = false
+                that.addressMessage = false
+            } else {
+                that.$message.error('请重新选择地址')
+            }
+          })
+        }
+      }
+    },
     getList () { }
   }
 }