3 changed files with 996 additions and 0 deletions
			
			
		@ -0,0 +1,441 @@ | 
				
			|||
<template> | 
				
			|||
  <div> | 
				
			|||
    <div class="dialog-h-content scroll-h"> | 
				
			|||
      <el-form | 
				
			|||
        ref="ref_form" | 
				
			|||
        :model="fmData" | 
				
			|||
        :inline="true" | 
				
			|||
        :disabled="formType === 'watch'" | 
				
			|||
        class="form" | 
				
			|||
      > | 
				
			|||
        <el-form-item | 
				
			|||
          v-for="item in editParams" | 
				
			|||
          label-width="150px" | 
				
			|||
          style="display: block" | 
				
			|||
          :key="'edit' + item.keyName" | 
				
			|||
          :label="item.field" | 
				
			|||
          :prop="item.keyName" | 
				
			|||
          :rules="item.rules || []" | 
				
			|||
        > | 
				
			|||
          <template v-if="item.type == 'input'"> | 
				
			|||
            <el-input | 
				
			|||
              v-if=" | 
				
			|||
                formType == 'add' || (formType == 'edit' && !item.editDisable) | 
				
			|||
              " | 
				
			|||
              v-model="fmData[item.keyName]" | 
				
			|||
              class="item_width_1" | 
				
			|||
              size="small" | 
				
			|||
              clearable | 
				
			|||
              show-word-limit | 
				
			|||
              :maxlength="item.maxlength || ''" | 
				
			|||
              :placeholder="item.placeholder || '请输入'" | 
				
			|||
            > | 
				
			|||
            </el-input> | 
				
			|||
 | 
				
			|||
            <div style="width: 610px" v-else> | 
				
			|||
              {{ item.value || "--" }} | 
				
			|||
            </div> | 
				
			|||
          </template> | 
				
			|||
 | 
				
			|||
          <template v-if="item.type == 'textarea'"> | 
				
			|||
            <el-input | 
				
			|||
              v-if=" | 
				
			|||
                formType == 'add' || (formType == 'edit' && !item.editDisable) | 
				
			|||
              " | 
				
			|||
              v-model="fmData[item.keyName]" | 
				
			|||
              type="textarea" | 
				
			|||
              class="item_width_1" | 
				
			|||
              size="small" | 
				
			|||
              clearable | 
				
			|||
              show-word-limit | 
				
			|||
              :rows="3" | 
				
			|||
              :maxlength="item.maxlength || ''" | 
				
			|||
              :placeholder="item.placeholder || '请输入'" | 
				
			|||
            > | 
				
			|||
            </el-input> | 
				
			|||
 | 
				
			|||
            <div style="width: 610px" v-else> | 
				
			|||
              {{ item.value || "--" }} | 
				
			|||
            </div> | 
				
			|||
          </template> | 
				
			|||
 | 
				
			|||
          <template v-else-if="item.type == 'select'"> | 
				
			|||
            <el-select | 
				
			|||
              v-model="fmData[item.keyName]" | 
				
			|||
              :placeholder="item.placeholder || '请选择'" | 
				
			|||
              size="small" | 
				
			|||
              clearable | 
				
			|||
              class="item_width_2" | 
				
			|||
            > | 
				
			|||
              <el-option | 
				
			|||
                v-for="subItem in item.optionList" | 
				
			|||
                :key="subItem.value" | 
				
			|||
                :label="subItem.label" | 
				
			|||
                :value="subItem.value" | 
				
			|||
              > | 
				
			|||
              </el-option> | 
				
			|||
            </el-select> | 
				
			|||
          </template> | 
				
			|||
 | 
				
			|||
          <template v-else-if="item.type == 'address'"> | 
				
			|||
            <div style="width: 500px"> | 
				
			|||
              <el-input | 
				
			|||
                class="item_width_4" | 
				
			|||
                maxlength="100" | 
				
			|||
                style="width: 430px" | 
				
			|||
                show-word-limit | 
				
			|||
                :placeholder="item.placeholder || '请输入所在地址'" | 
				
			|||
                v-model="fmData[item.keyName]" | 
				
			|||
              > | 
				
			|||
              </el-input> | 
				
			|||
              <el-button | 
				
			|||
                style="margin-left: 10px" | 
				
			|||
                type="default" | 
				
			|||
                size="small" | 
				
			|||
                @click="handleSearchMap(item)" | 
				
			|||
                >查询</el-button | 
				
			|||
              > | 
				
			|||
              <div id="app" class="div_map"></div> | 
				
			|||
              <div style="margin-top: 10px"> | 
				
			|||
                <span>经度</span> | 
				
			|||
                <el-input | 
				
			|||
                  class="item_width_3" | 
				
			|||
                  maxlength="50" | 
				
			|||
                  placeholder="请输入经度" | 
				
			|||
                  v-model="fmData[item.supKeys[0]]" | 
				
			|||
                > | 
				
			|||
                </el-input> | 
				
			|||
                <span style="margin-left: 20px">纬度</span> | 
				
			|||
                <el-input | 
				
			|||
                  class="item_width_3" | 
				
			|||
                  maxlength="50" | 
				
			|||
                  placeholder="请输入纬度" | 
				
			|||
                  v-model="fmData[item.supKeys[1]]" | 
				
			|||
                > | 
				
			|||
                </el-input> | 
				
			|||
              </div> | 
				
			|||
            </div> | 
				
			|||
          </template> | 
				
			|||
        </el-form-item> | 
				
			|||
      </el-form> | 
				
			|||
    </div> | 
				
			|||
 | 
				
			|||
    <div class="div_btn resi-btns"> | 
				
			|||
      <el-button size="small" @click="handleCancle">取 消</el-button> | 
				
			|||
      <el-button | 
				
			|||
        v-if="formType != 'watch'" | 
				
			|||
        type="primary" | 
				
			|||
        size="small" | 
				
			|||
        :disabled="btnDisable" | 
				
			|||
        @click="handleComfirm" | 
				
			|||
        >确 定</el-button | 
				
			|||
      > | 
				
			|||
    </div> | 
				
			|||
  </div> | 
				
			|||
</template> | 
				
			|||
 | 
				
			|||
<script> | 
				
			|||
import { mapGetters } from "vuex"; | 
				
			|||
import { requestPost } from "@/js/dai/request"; | 
				
			|||
import nextTick from "dai-js/tools/nextTick"; | 
				
			|||
 | 
				
			|||
var map; | 
				
			|||
var search; | 
				
			|||
var markers; | 
				
			|||
var infoWindowList; | 
				
			|||
var geocoder; // 新建一个正逆地址解析类 | 
				
			|||
 | 
				
			|||
export default { | 
				
			|||
  props: { | 
				
			|||
    formId: { | 
				
			|||
      type: String, | 
				
			|||
      default: "", | 
				
			|||
    }, | 
				
			|||
    formType: { | 
				
			|||
      type: String, | 
				
			|||
      default: "info", | 
				
			|||
    }, | 
				
			|||
    editParams: { | 
				
			|||
      type: Array, | 
				
			|||
      default: () => [], | 
				
			|||
    }, | 
				
			|||
  }, | 
				
			|||
 | 
				
			|||
  data() { | 
				
			|||
    return { | 
				
			|||
      btnDisable: false, | 
				
			|||
 | 
				
			|||
      fmData: {}, | 
				
			|||
    }; | 
				
			|||
  }, | 
				
			|||
  components: {}, | 
				
			|||
  computed: {}, | 
				
			|||
  watch: { | 
				
			|||
    editParams: { | 
				
			|||
      handler() { | 
				
			|||
        this.computeFmData(); | 
				
			|||
      }, | 
				
			|||
      deep: true, | 
				
			|||
    }, | 
				
			|||
  }, | 
				
			|||
 | 
				
			|||
  async mounted() { | 
				
			|||
    this.initForm(); | 
				
			|||
  }, | 
				
			|||
 | 
				
			|||
  methods: { | 
				
			|||
    async initForm() { | 
				
			|||
      this.iniFmData(); | 
				
			|||
 | 
				
			|||
      if (this.formId && this.formType != "add") { | 
				
			|||
        this.getInfo(); | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    iniFmData() { | 
				
			|||
      const { editParams } = this; | 
				
			|||
      editParams.forEach(async (item, index) => { | 
				
			|||
        this.fmData[item.keyName] = item.value; | 
				
			|||
        if (item.type == "select") { | 
				
			|||
          if (item.optionUrl) { | 
				
			|||
            this.getFmOptions( | 
				
			|||
              index, | 
				
			|||
              item.optionUrl, | 
				
			|||
              item.optionUrlParams || {} | 
				
			|||
            ); | 
				
			|||
          } | 
				
			|||
        } else if (item.type == "address") { | 
				
			|||
          await nextTick(500); | 
				
			|||
          this.initMap(item); | 
				
			|||
        } | 
				
			|||
      }); | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    async getFmOptions(index, url, params) { | 
				
			|||
      const { data, code, msg } = await requestPost(url, { | 
				
			|||
        ...params, | 
				
			|||
      }); | 
				
			|||
 | 
				
			|||
      if (code === 0) { | 
				
			|||
        this.editParams[index].optionList = data || []; | 
				
			|||
      } else { | 
				
			|||
        this.$message.error("请求检索基础数据失败!"); | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    // 地图初始化函数,本例取名为init,开发者可根据实际情况定义 | 
				
			|||
    initMap(item) { | 
				
			|||
      // 定义地图中心点坐标 | 
				
			|||
      var center = new window.TMap.LatLng(36.0722275, 120.38945519); | 
				
			|||
      // 定义map变量,调用 TMap.Map() 构造函数创建地图 | 
				
			|||
      map = new window.TMap.Map(document.getElementById("app"), { | 
				
			|||
        center: center, // 设置地图中心点坐标 | 
				
			|||
        zoom: 17.2, // 设置地图缩放级别 | 
				
			|||
        pitch: 43.5, // 设置俯仰角 | 
				
			|||
        rotation: 45, // 设置地图旋转角度 | 
				
			|||
      }); | 
				
			|||
 | 
				
			|||
      search = new window.TMap.service.Search({ pageSize: 10 }); | 
				
			|||
      // 新建一个地点搜索类 | 
				
			|||
      markers = new TMap.MultiMarker({ | 
				
			|||
        map: map, | 
				
			|||
        geometries: [], | 
				
			|||
      }); | 
				
			|||
      infoWindowList = Array(10); | 
				
			|||
 | 
				
			|||
      geocoder = new TMap.service.Geocoder(); // 新建一个正逆地址解析类 | 
				
			|||
 | 
				
			|||
      // 监听地图平移结束 | 
				
			|||
      map.on("panend", () => { | 
				
			|||
        this.handleMoveCenter(item); | 
				
			|||
      }); | 
				
			|||
      this.handleMoveCenter(item); | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    setMarker(lat, lng) { | 
				
			|||
      markers.setGeometries([]); | 
				
			|||
      markers.add([ | 
				
			|||
        { | 
				
			|||
          id: "4", | 
				
			|||
          styleId: "marker", | 
				
			|||
          position: new TMap.LatLng(lat, lng), | 
				
			|||
          properties: { | 
				
			|||
            title: "marker4", | 
				
			|||
          }, | 
				
			|||
        }, | 
				
			|||
      ]); | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    handleSearchMap(item) { | 
				
			|||
      infoWindowList.forEach((infoWindow) => { | 
				
			|||
        infoWindow.close(); | 
				
			|||
      }); | 
				
			|||
      infoWindowList.length = 0; | 
				
			|||
      markers.setGeometries([]); | 
				
			|||
      // 在地图显示范围内以给定的关键字搜索地点 | 
				
			|||
      search | 
				
			|||
        .searchRectangle({ | 
				
			|||
          keyword: item.value, | 
				
			|||
          bounds: map.getBounds(), | 
				
			|||
        }) | 
				
			|||
        .then((result) => { | 
				
			|||
          let { data } = result; | 
				
			|||
          if (Array.isArray(data) && data.length > 0) { | 
				
			|||
            const { | 
				
			|||
              location: { lat, lng }, | 
				
			|||
            } = data[0]; | 
				
			|||
            map.setCenter(new TMap.LatLng(lat, lng)); | 
				
			|||
            this.setMarker(lat, lng); | 
				
			|||
            item.supValues[0] = lng; | 
				
			|||
            item.supValues[1] = lat; | 
				
			|||
          } else { | 
				
			|||
            this.$message.error("未检索到相关位置坐标"); | 
				
			|||
          } | 
				
			|||
        }); | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    handleMoveCenter(item) { | 
				
			|||
      //修改地图中心点 | 
				
			|||
      const center = map.getCenter(); | 
				
			|||
      const lat = center.getLat(); | 
				
			|||
      const lng = center.getLng(); | 
				
			|||
      item.supValues[0] = lng; | 
				
			|||
      item.supValues[1] = lat; | 
				
			|||
      this.setMarker(lat, lng); | 
				
			|||
 | 
				
			|||
      geocoder | 
				
			|||
        .getAddress({ location: new TMap.LatLng(lat, lng) }) // 将给定的坐标位置转换为地址 | 
				
			|||
        .then((result) => { | 
				
			|||
          item.value = result.result.address; | 
				
			|||
        }); | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    async getInfo() { | 
				
			|||
      const url = "/heart/icServiceOrg/detail"; | 
				
			|||
 | 
				
			|||
      const params = { | 
				
			|||
        icServiceOrgId: this.formId, | 
				
			|||
      }; | 
				
			|||
 | 
				
			|||
      const { data, code, msg } = await requestPost(url, params); | 
				
			|||
      if (code === 0) { | 
				
			|||
        this.fmData = { | 
				
			|||
          ...this.fmData, | 
				
			|||
          ...data, | 
				
			|||
          serviceTypeArr: data.serviceType.split(","), | 
				
			|||
        }; | 
				
			|||
        map.setCenter(new TMap.LatLng(data.latitude, data.longitude)); | 
				
			|||
      } else { | 
				
			|||
        this.$message.error(msg); | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    watchImg(src) { | 
				
			|||
      window.open(src); | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    async handleComfirm() { | 
				
			|||
      this.btnDisable = true; | 
				
			|||
      setTimeout(() => { | 
				
			|||
        this.btnDisable = false; | 
				
			|||
      }, 5000); | 
				
			|||
      this.computeFmData(); | 
				
			|||
      this.$refs["ref_form"].validate((valid, messageObj) => { | 
				
			|||
        if (!valid) { | 
				
			|||
          app.util.validateRule(messageObj); | 
				
			|||
          this.btnDisable = false; | 
				
			|||
        } else { | 
				
			|||
          this.submit(); | 
				
			|||
        } | 
				
			|||
      }); | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    computeFmData() { | 
				
			|||
      console.log("11111111111111111112", this.fmData); | 
				
			|||
      // let fmData = {}; | 
				
			|||
      // this.editParams.forEach((item) => { | 
				
			|||
      //   fmData[item.keyName] = item.value; | 
				
			|||
      //   if (item.supValues) { | 
				
			|||
      //     item.supValues.forEach((value, index) => { | 
				
			|||
      //       fmData[item.supKeys[index]] = value; | 
				
			|||
      //     }); | 
				
			|||
      //   } | 
				
			|||
      // }); | 
				
			|||
      // this.fmData = fmData; | 
				
			|||
      return this.fmData; | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    async submit() { | 
				
			|||
      let url = ""; | 
				
			|||
      let params = { | 
				
			|||
        ...this.computeFmData(), | 
				
			|||
        // serviceType: this.fmData.serviceTypeArr.join(","), | 
				
			|||
      }; | 
				
			|||
 | 
				
			|||
      if (this.formType === "add") { | 
				
			|||
        url = this.addUrl; | 
				
			|||
      } else { | 
				
			|||
        url = this.editUrl; | 
				
			|||
 | 
				
			|||
        // params.icServiceOrgId = this.formId; | 
				
			|||
      } | 
				
			|||
 | 
				
			|||
      const { data, code, msg } = await requestPost(url, params); | 
				
			|||
 | 
				
			|||
      if (code === 0) { | 
				
			|||
        this.$message({ | 
				
			|||
          type: "success", | 
				
			|||
          message: "操作成功", | 
				
			|||
        }); | 
				
			|||
        this.$emit("afterEdit"); | 
				
			|||
        this.btnDisable = false; | 
				
			|||
      } else { | 
				
			|||
        this.btnDisable = false; | 
				
			|||
        this.$message.error(msg); | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    handleCancle() { | 
				
			|||
      this.$emit("close"); | 
				
			|||
    }, | 
				
			|||
  }, | 
				
			|||
}; | 
				
			|||
</script> | 
				
			|||
 | 
				
			|||
<style lang="scss" scoped> | 
				
			|||
.item_width_1 { | 
				
			|||
  width: 500px; | 
				
			|||
} | 
				
			|||
.item_width_2 { | 
				
			|||
  width: 400px; | 
				
			|||
} | 
				
			|||
.item_width_3 { | 
				
			|||
  margin-left: 10px; | 
				
			|||
  width: 200px; | 
				
			|||
} | 
				
			|||
.item_width_4 { | 
				
			|||
  width: 200px; | 
				
			|||
} | 
				
			|||
 | 
				
			|||
.div_map { | 
				
			|||
  margin-top: 10px; | 
				
			|||
} | 
				
			|||
 | 
				
			|||
.div_btn { | 
				
			|||
  // display: flex; | 
				
			|||
  // justify-content: flex-end; | 
				
			|||
} | 
				
			|||
.el-tabs { | 
				
			|||
  margin: 0 20px; | 
				
			|||
} | 
				
			|||
.el-upload__tip { | 
				
			|||
  color: rgb(155, 155, 155); | 
				
			|||
  margin: 0; | 
				
			|||
} | 
				
			|||
.form { | 
				
			|||
  margin-top: 30px; | 
				
			|||
} | 
				
			|||
 | 
				
			|||
.attachement-list { | 
				
			|||
} | 
				
			|||
</style> | 
				
			|||
@ -0,0 +1,451 @@ | 
				
			|||
<template> | 
				
			|||
  <div class="div_main"> | 
				
			|||
    <div v-show="true"> | 
				
			|||
      <div class="div_search"> | 
				
			|||
        <el-form :inline="true" ref="ref_searchform" :label-width="'80px'"> | 
				
			|||
          <div> | 
				
			|||
            <el-form-item | 
				
			|||
              v-for="item in searchParams" | 
				
			|||
              :key="'serach' + item.keyName" | 
				
			|||
              :label="item.field" | 
				
			|||
              :prop="item.keyName" | 
				
			|||
            > | 
				
			|||
              <template v-if="item.type == 'input'"> | 
				
			|||
                <el-input | 
				
			|||
                  v-model="item.value" | 
				
			|||
                  class="item_width_1" | 
				
			|||
                  size="small" | 
				
			|||
                  clearable | 
				
			|||
                  :placeholder="item.placeholder || '请输入'" | 
				
			|||
                > | 
				
			|||
                </el-input> | 
				
			|||
              </template> | 
				
			|||
              <template v-else-if="item.type == 'select'"> | 
				
			|||
                <el-select | 
				
			|||
                  v-model="item.value" | 
				
			|||
                  :placeholder="item.placeholder || '请选择'" | 
				
			|||
                  size="small" | 
				
			|||
                  clearable | 
				
			|||
                  class="item_width_2" | 
				
			|||
                > | 
				
			|||
                  <el-option | 
				
			|||
                    v-for="item in item.optionList" | 
				
			|||
                    :key="item.value" | 
				
			|||
                    :label="item.label" | 
				
			|||
                    :value="item.value" | 
				
			|||
                  > | 
				
			|||
                  </el-option> | 
				
			|||
                </el-select> | 
				
			|||
              </template> | 
				
			|||
            </el-form-item> | 
				
			|||
 | 
				
			|||
            <el-button | 
				
			|||
              style="margin-left: 30px" | 
				
			|||
              size="small" | 
				
			|||
              class="diy-button--search" | 
				
			|||
              @click="handleSearch" | 
				
			|||
              >查询</el-button | 
				
			|||
            > | 
				
			|||
            <el-button | 
				
			|||
              style="margin-left: 10px" | 
				
			|||
              size="small" | 
				
			|||
              class="diy-button--reset" | 
				
			|||
              @click="resetSearch" | 
				
			|||
              >重置</el-button | 
				
			|||
            > | 
				
			|||
          </div> | 
				
			|||
        </el-form> | 
				
			|||
      </div> | 
				
			|||
 | 
				
			|||
      <div class="div_table"> | 
				
			|||
        <div class="div_btn"> | 
				
			|||
          <el-button | 
				
			|||
            class="diy-button--add" | 
				
			|||
            v-if="addUrl" | 
				
			|||
            size="small" | 
				
			|||
            @click="handleAdd" | 
				
			|||
            >新增</el-button | 
				
			|||
          > | 
				
			|||
 | 
				
			|||
          <!-- <el-button | 
				
			|||
            @click="handleExport" | 
				
			|||
            class="diy-button--reset" | 
				
			|||
            size="small" | 
				
			|||
            >导出</el-button | 
				
			|||
          > --> | 
				
			|||
        </div> | 
				
			|||
 | 
				
			|||
        <el-table | 
				
			|||
          :data="tableData" | 
				
			|||
          border | 
				
			|||
          :header-cell-style="{ background: '#2195FE', color: '#FFFFFF' }" | 
				
			|||
          class="table" | 
				
			|||
          style="width: 100%" | 
				
			|||
          :height="maxTableHeight" | 
				
			|||
        > | 
				
			|||
          <template v-for="item in tableParams" :prop="item.keyName"> | 
				
			|||
            <el-table-column | 
				
			|||
              v-if="item.type == 'no'" | 
				
			|||
              :key="'table' + item.keyName" | 
				
			|||
              :label="item.field" | 
				
			|||
              fixed="left" | 
				
			|||
              type="index" | 
				
			|||
              align="center" | 
				
			|||
              width="50" | 
				
			|||
            /> | 
				
			|||
 | 
				
			|||
            <el-table-column | 
				
			|||
              :key="'table' + item.keyName" | 
				
			|||
              v-else-if="item.type == 'text'" | 
				
			|||
              :prop="item.keyName" | 
				
			|||
              :label="item.field" | 
				
			|||
              align="center" | 
				
			|||
              :width="item.width || ''" | 
				
			|||
              :show-overflow-tooltip="true" | 
				
			|||
            > | 
				
			|||
            </el-table-column> | 
				
			|||
          </template> | 
				
			|||
 | 
				
			|||
          <el-table-column | 
				
			|||
            fixed="right" | 
				
			|||
            label="操作" | 
				
			|||
            align="center" | 
				
			|||
            width="200" | 
				
			|||
          > | 
				
			|||
            <template slot-scope="scope"> | 
				
			|||
              <el-button | 
				
			|||
                @click="handleWatch(scope.row)" | 
				
			|||
                type="text" | 
				
			|||
                size="small" | 
				
			|||
                class=".div-table-button--detail" | 
				
			|||
                >查看</el-button | 
				
			|||
              > | 
				
			|||
              <el-button | 
				
			|||
                v-if="editUrl" | 
				
			|||
                @click="handleEdit(scope.row)" | 
				
			|||
                type="text" | 
				
			|||
                size="small" | 
				
			|||
                class="div-table-button--edit" | 
				
			|||
                >编辑</el-button | 
				
			|||
              > | 
				
			|||
              <el-popconfirm | 
				
			|||
                v-if="delUrl" | 
				
			|||
                title="删除之后无法回复,确认删除?" | 
				
			|||
                @onConfirm="handleDelete(scope.row, scope.$index)" | 
				
			|||
                @confirm="handleDelete(scope.row, scope.$index)" | 
				
			|||
              > | 
				
			|||
                <el-button | 
				
			|||
                  slot="reference" | 
				
			|||
                  type="text" | 
				
			|||
                  size="small" | 
				
			|||
                  style="margin-left: 10px" | 
				
			|||
                  class="div-table-button--delete" | 
				
			|||
                  >删除</el-button | 
				
			|||
                > | 
				
			|||
              </el-popconfirm> | 
				
			|||
            </template> | 
				
			|||
          </el-table-column> | 
				
			|||
        </el-table> | 
				
			|||
 | 
				
			|||
        <div> | 
				
			|||
          <el-pagination | 
				
			|||
            @size-change="handleSizeChange" | 
				
			|||
            @current-change="handleCurrentChange" | 
				
			|||
            :current-page.sync="pageNo" | 
				
			|||
            :page-sizes="[20, 50, 100, 200]" | 
				
			|||
            :page-size="parseInt(pageSize)" | 
				
			|||
            layout="sizes, prev, pager, next, total" | 
				
			|||
            :total="total" | 
				
			|||
          > | 
				
			|||
          </el-pagination> | 
				
			|||
        </div> | 
				
			|||
      </div> | 
				
			|||
    </div> | 
				
			|||
 | 
				
			|||
    <!-- 修改弹出框 --> | 
				
			|||
    <el-dialog | 
				
			|||
      v-if="formShow" | 
				
			|||
      :visible.sync="formShow" | 
				
			|||
      :close-on-click-modal="false" | 
				
			|||
      :close-on-press-escape="false" | 
				
			|||
      :title="formTitle" | 
				
			|||
      width="850px" | 
				
			|||
      top="5vh" | 
				
			|||
      class="dialog-h" | 
				
			|||
      @closed="handleClose" | 
				
			|||
    > | 
				
			|||
      <edit-form | 
				
			|||
        ref="eleEditForm" | 
				
			|||
        :formId="formId" | 
				
			|||
        :formType="formType" | 
				
			|||
        :editParams="editParams" | 
				
			|||
        @close="handleClose" | 
				
			|||
        @afterEdit="handleEditSuccess" | 
				
			|||
      ></edit-form> | 
				
			|||
    </el-dialog> | 
				
			|||
  </div> | 
				
			|||
</template> | 
				
			|||
 | 
				
			|||
<script> | 
				
			|||
import { requestPost } from "@/js/dai/request"; | 
				
			|||
import { mapGetters } from "vuex"; | 
				
			|||
import axios from "axios"; | 
				
			|||
import editForm from "./cpts/edit"; | 
				
			|||
 | 
				
			|||
export default { | 
				
			|||
  components: { editForm }, | 
				
			|||
 | 
				
			|||
  props: { | 
				
			|||
    searchParams: { | 
				
			|||
      type: Array, | 
				
			|||
      default: () => [], | 
				
			|||
    }, | 
				
			|||
    searchUrl: { | 
				
			|||
      type: String, | 
				
			|||
      default: "", | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    tableParams: { | 
				
			|||
      type: Array, | 
				
			|||
      default: () => [], | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    tableUrl: { | 
				
			|||
      type: String, | 
				
			|||
      default: "", | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    addUrl: { | 
				
			|||
      type: String, | 
				
			|||
      default: "", | 
				
			|||
    }, | 
				
			|||
    editUrl: { | 
				
			|||
      type: String, | 
				
			|||
      default: "", | 
				
			|||
    }, | 
				
			|||
    delUrl: { | 
				
			|||
      type: String, | 
				
			|||
      default: "", | 
				
			|||
    }, | 
				
			|||
    exportUrl: { | 
				
			|||
      type: String, | 
				
			|||
      default: "", | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    editParams: { | 
				
			|||
      type: Array, | 
				
			|||
      default: () => [], | 
				
			|||
    }, | 
				
			|||
  }, | 
				
			|||
 | 
				
			|||
  data() { | 
				
			|||
    return { | 
				
			|||
      tableData: [], | 
				
			|||
 | 
				
			|||
      pageNo: 1, | 
				
			|||
      pageSize: window.localStorage.getItem("pageSize") || 20, | 
				
			|||
      total: 1, | 
				
			|||
 | 
				
			|||
      formId: "", | 
				
			|||
      formShow: false, | 
				
			|||
      formTitle: "详情", | 
				
			|||
      formType: "", // 列表list 新增add  修改edit 详情info | 
				
			|||
    }; | 
				
			|||
  }, | 
				
			|||
 | 
				
			|||
  computed: { | 
				
			|||
    maxTableHeight() { | 
				
			|||
      return this.$store.state.inIframe | 
				
			|||
        ? this.clientHeight - 410 + this.iframeHeigh | 
				
			|||
        : this.clientHeight - 410; | 
				
			|||
    }, | 
				
			|||
    ...mapGetters(["clientHeight", "iframeHeight"]), | 
				
			|||
  }, | 
				
			|||
 | 
				
			|||
  watch: {}, | 
				
			|||
 | 
				
			|||
  mounted() { | 
				
			|||
    console.log(this.$store.state); | 
				
			|||
    this.user = this.$store.state.user; | 
				
			|||
 | 
				
			|||
    this.agencyId = this.user.agencyId; | 
				
			|||
 | 
				
			|||
    this.iniSearchData(); | 
				
			|||
 | 
				
			|||
    this.getTableData(); | 
				
			|||
  }, | 
				
			|||
  methods: { | 
				
			|||
    iniSearchData() { | 
				
			|||
      const { searchParams } = this; | 
				
			|||
      searchParams.forEach((item, index) => { | 
				
			|||
        if (item.type == "select") { | 
				
			|||
          if (item.optionUrl) { | 
				
			|||
            this.getFmOptions( | 
				
			|||
              index, | 
				
			|||
              item.optionUrl, | 
				
			|||
              item.optionUrlParams || {} | 
				
			|||
            ); | 
				
			|||
          } | 
				
			|||
        } | 
				
			|||
      }); | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    async getFmOptions(index, url, params) { | 
				
			|||
      const { data, code, msg } = await requestPost(url, { | 
				
			|||
        ...params, | 
				
			|||
      }); | 
				
			|||
 | 
				
			|||
      if (code === 0) { | 
				
			|||
        this.searchParams[index].optionList = data || []; | 
				
			|||
      } else { | 
				
			|||
        this.$message.error("请求检索基础数据失败!"); | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    handleSearch(val) { | 
				
			|||
      this.pageNo = 1; | 
				
			|||
 | 
				
			|||
      this.getTableData(); | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    async handleExport() { | 
				
			|||
      const { exportUrl: url } = this; | 
				
			|||
      if (!url) return; | 
				
			|||
 | 
				
			|||
      const { pageSize, pageNo } = this; | 
				
			|||
 | 
				
			|||
      axios({ | 
				
			|||
        url: window.SITE_CONFIG["apiURL"] + url, | 
				
			|||
        method: "post", | 
				
			|||
        data: { | 
				
			|||
          pageSize, | 
				
			|||
          pageNo, | 
				
			|||
          ...this.computeFmData(), | 
				
			|||
        }, | 
				
			|||
        responseType: "blob", | 
				
			|||
      }) | 
				
			|||
        .then((res) => { | 
				
			|||
          let fileName = window.decodeURI( | 
				
			|||
            res.headers["content-disposition"].split(";")[1].split("=")[1] | 
				
			|||
          ); | 
				
			|||
          console.log("filename", fileName); | 
				
			|||
          let blob = new Blob([res.data], { type: "application/vnd.ms-excel" }); | 
				
			|||
          var url = window.URL.createObjectURL(blob); | 
				
			|||
          var aLink = document.createElement("a"); | 
				
			|||
          aLink.style.display = "none"; | 
				
			|||
          aLink.href = url; | 
				
			|||
          aLink.setAttribute("download", fileName); | 
				
			|||
          document.body.appendChild(aLink); | 
				
			|||
          aLink.click(); | 
				
			|||
          document.body.removeChild(aLink); //下载完成移除元素 | 
				
			|||
          window.URL.revokeObjectURL(url); //释放掉blob对象 | 
				
			|||
        }) | 
				
			|||
        .catch((err) => { | 
				
			|||
          console.log("获取导出情失败", err); | 
				
			|||
          return this.$message.error("网络错误"); | 
				
			|||
        }); | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    handleAdd() { | 
				
			|||
      this.formType = "add"; | 
				
			|||
      this.formTitle = "新增"; | 
				
			|||
      this.formShow = true; | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    handleWatch(row) { | 
				
			|||
      this.formType = "watch"; | 
				
			|||
      this.formId = row.icServiceOrgId; | 
				
			|||
      this.formTitle = "查看"; | 
				
			|||
      this.formShow = true; | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    handleEdit(row) { | 
				
			|||
      this.formType = "edit"; | 
				
			|||
      this.formId = row.icServiceOrgId; | 
				
			|||
      this.formTitle = "编辑"; | 
				
			|||
      this.formShow = true; | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    handleClose() { | 
				
			|||
      this.formShow = false; | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    handleEditSuccess() { | 
				
			|||
      this.handleClose(); | 
				
			|||
      this.getTableData(); | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    async handleDelete(rowData, rowIndex) { | 
				
			|||
      console.log(rowData, rowIndex); | 
				
			|||
      const { delUrl: url } = this; | 
				
			|||
      if (!url) return; | 
				
			|||
 | 
				
			|||
      const { tableData } = this; | 
				
			|||
 | 
				
			|||
      const { data, code, msg } = await requestPost(url, { | 
				
			|||
        icServiceOrgId: tableData[rowIndex].icServiceOrgId, | 
				
			|||
      }); | 
				
			|||
 | 
				
			|||
      if (code === 0) { | 
				
			|||
        this.$message.success("删除成功!"); | 
				
			|||
        this.getTableData(); | 
				
			|||
      } else { | 
				
			|||
        this.$message.error("操作失败!"); | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    computeFmData() { | 
				
			|||
      let fmData = {}; | 
				
			|||
      this.searchParams.forEach((item) => { | 
				
			|||
        fmData[item.keyName] = item.value; | 
				
			|||
      }); | 
				
			|||
      return fmData; | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    async getTableData() { | 
				
			|||
      const { tableUrl: url, searchParams } = this; | 
				
			|||
      if (!url) return; | 
				
			|||
 | 
				
			|||
      const { pageSize, pageNo } = this; | 
				
			|||
      const { data, code, msg } = await requestPost(url, { | 
				
			|||
        pageSize, | 
				
			|||
        pageNo, | 
				
			|||
        ...this.computeFmData(), | 
				
			|||
      }); | 
				
			|||
 | 
				
			|||
      if (code === 0) { | 
				
			|||
        this.total = data.total || 0; | 
				
			|||
        this.tableData = data.list | 
				
			|||
          ? data.list.map((item) => { | 
				
			|||
              return item; | 
				
			|||
            }) | 
				
			|||
          : []; | 
				
			|||
      } else { | 
				
			|||
        this.$message.error(msg); | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    handleSizeChange(val) { | 
				
			|||
      this.pageSize = val; | 
				
			|||
      window.localStorage.setItem("pageSize", val); | 
				
			|||
      this.getTableData(); | 
				
			|||
    }, | 
				
			|||
    handleCurrentChange(val) { | 
				
			|||
      this.pageNo = val; | 
				
			|||
      this.getTableData(); | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    resetSearch() { | 
				
			|||
      this.searchParams.forEach((item) => { | 
				
			|||
        item.value = ""; | 
				
			|||
      }); | 
				
			|||
    }, | 
				
			|||
  }, | 
				
			|||
}; | 
				
			|||
</script> | 
				
			|||
 | 
				
			|||
<style lang="scss" scoped> | 
				
			|||
@import "@/assets/scss/buttonstyle.scss"; | 
				
			|||
@import "@/assets/scss/modules/management/list-main.scss"; | 
				
			|||
@import "@/assets/scss/modules/shequzhili/event-info.scss"; | 
				
			|||
</style> | 
				
			|||
@ -0,0 +1,104 @@ | 
				
			|||
<template> | 
				
			|||
  <div> | 
				
			|||
    <base-page | 
				
			|||
      :searchParams="searchParams" | 
				
			|||
      :tableParams="tableParams" | 
				
			|||
      :tableUrl="tableUrl" | 
				
			|||
      :addUrl="addUrl" | 
				
			|||
      :editUrl="editUrl" | 
				
			|||
      :delUrl="delUrl" | 
				
			|||
      :exportUrl="exportUrl" | 
				
			|||
      :editParams="editParams" | 
				
			|||
    ></base-page> | 
				
			|||
  </div> | 
				
			|||
</template> | 
				
			|||
 | 
				
			|||
<script> | 
				
			|||
import basePage from "@/views/modules/cpts/base/index"; | 
				
			|||
 | 
				
			|||
export default { | 
				
			|||
  props: {}, | 
				
			|||
 | 
				
			|||
  data() { | 
				
			|||
    return { | 
				
			|||
      searchParams: [ | 
				
			|||
        { | 
				
			|||
          field: "服务类别", | 
				
			|||
          keyName: "serviceType", | 
				
			|||
          type: "select", | 
				
			|||
          optionUrl: "/sys/dict/data/dictlist", | 
				
			|||
          optionUrlParams: { | 
				
			|||
            dictType: "ic_service_type", | 
				
			|||
          }, | 
				
			|||
          optionList: [], | 
				
			|||
        }, | 
				
			|||
        { field: "服务组织", keyName: "orgName", type: "input" }, | 
				
			|||
        { field: "服务地址", keyName: "address", type: "input" }, | 
				
			|||
        { field: "备注", keyName: "remark", type: "input" }, | 
				
			|||
      ], | 
				
			|||
 | 
				
			|||
      tableParams: [ | 
				
			|||
        { field: "序号", keyName: "", type: "no" }, | 
				
			|||
        { field: "服务类别", keyName: "serviceType", type: "text" }, | 
				
			|||
        { field: "服务组织名称", keyName: "orgName", type: "text" }, | 
				
			|||
        { field: "服务地址", keyName: "address", type: "text" }, | 
				
			|||
        { field: "备注", keyName: "remark", type: "text" }, | 
				
			|||
      ], | 
				
			|||
      tableUrl: "/heart/icServiceOrg/list", | 
				
			|||
      exportUrl: "/gov/project/icEvent/export", | 
				
			|||
 | 
				
			|||
      editParams: [ | 
				
			|||
        { | 
				
			|||
          field: "服务类别", | 
				
			|||
          keyName: "serviceType", | 
				
			|||
          type: "select", | 
				
			|||
          optionUrl: "/sys/dict/data/dictlist", | 
				
			|||
          optionUrlParams: { | 
				
			|||
            dictType: "ic_service_type", | 
				
			|||
          }, | 
				
			|||
          optionList: [], | 
				
			|||
          editDisabled: true, | 
				
			|||
          rules: [ | 
				
			|||
            { required: true, message: "服务类别不能为空", trigger: "blur" }, | 
				
			|||
          ], | 
				
			|||
        }, | 
				
			|||
        { | 
				
			|||
          field: "服务组织", | 
				
			|||
          keyName: "orgName", | 
				
			|||
          type: "input", | 
				
			|||
          maxlength: 100, | 
				
			|||
          editDisabled: true, | 
				
			|||
          rules: [ | 
				
			|||
            { | 
				
			|||
              required: true, | 
				
			|||
              message: "服务组织名称不能为空", | 
				
			|||
              trigger: "blur", | 
				
			|||
            }, | 
				
			|||
          ], | 
				
			|||
        }, | 
				
			|||
        { | 
				
			|||
          field: "服务地址", | 
				
			|||
          keyName: "address", | 
				
			|||
          type: "address", | 
				
			|||
          supKeys: ["longitude", "latitude"], | 
				
			|||
          supValues: ["", ""], | 
				
			|||
        }, | 
				
			|||
        { field: "备注", keyName: "remark", type: "input" }, | 
				
			|||
      ], | 
				
			|||
 | 
				
			|||
      addUrl: "/heart/icServiceOrg/add", | 
				
			|||
      editUrl: "/heart/icServiceOrg/edit", | 
				
			|||
      delUrl: "/heart/icServiceOrg/del", | 
				
			|||
    }; | 
				
			|||
  }, | 
				
			|||
  components: { basePage }, | 
				
			|||
  computed: {}, | 
				
			|||
  watch: {}, | 
				
			|||
 | 
				
			|||
  async mounted() {}, | 
				
			|||
 | 
				
			|||
  methods: {}, | 
				
			|||
}; | 
				
			|||
</script> | 
				
			|||
 | 
				
			|||
<style lang="scss" scoped></style> | 
				
			|||
					Loading…
					
					
				
		Reference in new issue