地区联动表格-element

<!--国家地区联动表格-->
<template>
  <div class="register-info-table address-table" style="margin-top:10px;"> 
    <el-collapse v-model="taskcollapse" class="taskcollapse">
      <el-collapse-item :title="object.title" name="1">
        <el-row class="mytabs" style="padding:10px;">
          <el-col :span="24">
            <el-table
              class="system-table"
              :data="objectValue[object.id]"
              border
              fit
              width="100%" 
              @row-click="clickRow"
              >
              <el-table-column
                v-for="(item,index) in object.objDefault"
                :key="index"
                :show-overflow-tooltip="true"
                :class-name="tableRequiredFn(object,item)&&item.required?item.id+' is-required common-table':'removeFormerror'"
                >
                <template slot="header" slot-scope="scope">
                  <span class="table-header-required" v-if="tableRequiredFn(object,item)&&item.required">*</span>
                  {{item.name}}
                </template>
                <template slot-scope="scope">
                  <template v-if="itemXtype(item,scope.row)== 'select'">
                    <el-select  v-if="item.class=='country'"  
                      :disabled="!edit||item.disabled"
                      filterable
                      v-model="scope.row[item.id]" 
                      :placeholder="'请选择'"
                      @change="(query)=>selectChangeFn(query,item,scope.row)"
                      class="address-select ">
                      <el-option
                        v-for="ele in item.selectDetail"
                        :key="'a'+ele.value"
                        :label="ele.display"
                        :value="ele.value">
                      </el-option>
                    </el-select> 
                    <el-select 
                      v-else-if="item.class=='province'"
                      :disabled="!edit||item.disabled"
                      filterable
                      v-model="scope.row[item.id]" 
                      :placeholder="'请选择'"
                      @change="(query)=>selectChangeFn(query,item,scope.row)"
                      @visible-change="(query)=>getProvinceFn(item,scope.row,scope.$index,query)"
                      class="address-select ">
                      <el-option 
                        v-for="ele in province"
                        :key="'b'+ele.id"
                        :label="ele.name"
                        :value="ele.name">
                      </el-option>
                    </el-select>
                    <el-select v-else
                      :disabled="!edit||item.disabled"
                      filterable
                      v-model="scope.row[item.id]" 
                      :placeholder="'请选择'"
                      @change="(query)=>selectChangeFn(query,item,scope.row)"
                      @visible-change="(query)=>getCityFn(item,scope.row,scope.$index,query)"
                      class="address-select ">
                      <el-option 
                        v-for="ele in city"
                        :key="'c'+ele.id"
                        :label="ele.name"
                        :value="ele.name">
                      </el-option>
                    </el-select>
                  </template>
                  <template v-else>
                    <span v-if="scope.row[item.id]||edit"
                      :class="{'is-required':tableRequiredFn(object,item)&&item.required}">
                      <el-input
                        v-if="edit"
                        v-model="scope.row[item.id]"
                        :disabled="!edit||item.disabled"
                        :placeholder="edit||!item.disabled?'请输入':'——'">
                        </el-input>
                      <span v-else>
                        <span :class="{'gray-bar':!scope.row[item.id]}">{{scope.row[item.id]||'——'}}</span>
                      </span>
                    </span>
                    <span v-else class="gray-bar">——</span>
                  </template>
                </template>
              </el-table-column>
              <el-table-column label="操作" width="90" v-if="edit">
                <template slot-scope="scope">
                  <el-button
                    @click="addRow(scope.$index)"
                    icon="el-icon-plus"
                    type="text"
                    :disabled="!edit"
                  ></el-button>
                  <el-button
                    :disabled="!edit||objectValue[object.id].length<=1"
                    @click.native.prevent="deleteRow(scope.$index,scope.row)"
                    icon="el-icon-minus"
                    type="text"
                  ></el-button>
                </template>
              </el-table-column>
            </el-table>
          </el-col>
        </el-row>
      </el-collapse-item>
    </el-collapse>
  </div>
</template>
<script>
export default {
  components: { 
  },
  data() {
    return {
      taskcollapse: ["1"],
      // addressId:[],
      province:[],
      city:[],
    };
  },
  props: {
    object: Object,
    objectValue: Object
  },
  created() {
  },
  mounted() {
    this.init()
  },
  watch: {
    /*'objectValue.state':{//页面加载
      handler(val){
      var scope=this
      let tableData = this.objectValue[this.object.id]||[]
      if(tableData.length&&this.addressId.length){
        tableData.forEach(ele=>{
          scope.changeXtype(ele[scope.addressId[0]],ele,ele[scope.addressId[0]],'load')
        })
      }
      },deep:true
    }*/
  },
  computed: {
    edit() {
      return this.$store.state.edit;
    },
    addressData(){
      return this.$store.state.regionalCascade;
    },
    country(){
      return this.$store.state.countryData;
    },
    addressId(){
      let val=[];
      this.object.objDefault&&this.object.objDefault.forEach(item=>{
        val.push(item.id)
      });
      return val
    }

  }, 
  methods: {
    itemXtype(item,row){
      if(item.class=='country') return 'select'
      else{
        if(row[this.addressId[0]]=='CN'&&(item.class=='province'||item.class=='city')){
          return 'select'
        }else{
          return 'input'
        }
      }
    },
    init(){
      //this.object = require(`@/scene/RegisterPotentialSupplier/config/registerTable.js`);//父组件传过来
	  if(!this.objectValue[this.object.id]){
        this.$set(this.objectValue,this.object.id,[{}]);
      }
	  
	  let tableData = this.objectValue[this.object.id]||[]
      if(tableData.length&&this.addressId.length){//初始化加载
        tableData.forEach(ele=>{
          this.changeXtype(ele[this.addressId[0]],ele,ele[this.addressId[0]],'load')
        })
      }
    },
    getCityFn(row,data,index,val){
      let obj = []
      if(data[this.addressId[0]]=='CN'&&val){
        this.addressData.forEach(item=>{
          if(item.name==data[this.addressId[1]]){
            obj=item.children||[]
          }
        })
      }
      this.city = obj;
    },
    getProvinceFn(row,data,index,val){
      let obj = []
      if(data[this.addressId[0]]=='CN'&&val){
        this.province = this.addressData
      }else{
        this.province = [];
        if(!val&&this.oldProvince!=data[this.addressId[1]]) {
          this.oldProvince=data[this.addressId[1]];
          this.$set(data,this.addressId[2],'')
        }
      }
      this.city = obj;
    },
    selectChangeFn(val,item,row){
      if(item.class=='country'){
        if(val=='CN') {
          this.changeXtype(val,row,'CN')
        }
        else {
          this.$set(row,this.addressId[1],'')
          this.$set(row,this.addressId[2],'')
          this.changeXtype(val,row,'other')
        }
      }
    },
    changeXtype(val,row,type,load){
       this.object.objDefault&&this.object.objDefault.forEach((item,index)=>{
        if(index){
          if(item.class!='street'){
            if(type=='CN'){
              this.$set(item,'xtype','select')
            }else{
              this.$set(item,'xtype','input')
            }
          }
          if(!load) {
            this.$set(row,item.id,'')
          }
        }
      })
    },
    tableRequiredFn(object, item) {
      //表格根据分类是否必填
      if (this.commander && this.commander.tableRequiredFn) { 
        return this.commander.tableRequiredFn(object,item,this.objectValue,this);
      } else return true;
    },
    // 添加
    addRow(index) {
      if (!this.objectValue[this.object.id]) {
        this.$set(this.objectValue, this.object.id, []);
      } else {
        this.objectValue[this.object.id].push({});
      }
    },
    // 删除
    deleteRow(index, row) {
      if (this.objectValue[this.object.id].length === 1) {
        this.$message({
          message: "只有一条数据时,不能删除!",
          type: "warning"
        });
        return;
      } else {
        this.objectValue[this.object.id].splice(index, 1);
      }
    },
    clickRow(row) {
      this.nowRow = this.objectValue[this.object.id].indexOf(row);
    }
  }
};
</script>
<style lang="less">
.address-table {
  .el-button,
  .el-button--medium {
    min-width: 0;
  }
  .el-table--enable-row-hover .el-table__body tr:hover > td {
    background-color: #fff !important;
  }
  .removeFormerror {
    .formerror {
      border-color: transparent !important;
    }
  }
  .el-select .el-input.is-disabled input{
    padding-left:0!important;
  }
  .address-select{
    width: 100%;
  }
}
</style>


===================object.js================
module.exports = [   // 注册地址
  {
    "id": "registeredCountry",
    "defaultValue": null,
    "disabled": false,
    "link": false,
    "links": [],
    "name":"国家&地区",
    "class":'country',
    "placeholder": "",
    "vivoNotWrite":true,
    "required": true,
    "selectDetail": [],
    "show": false,
    "sort": false,
    "span": 24,
    "width":"180",
    "value": null,
    "xtype": "select"
  },
  {
    "id": "registeredProvince",
    "defaultValue": null,
    "disabled": false,
    "link": false,
    "links": [],
    "name":"省",
    "placeholder": "省",
    "class":'province',
    "vivoNotWrite":true,
    "required": true,
    "selectDetail": [],
    "show": false,
    "sort": false,
    "span": 24,
    "width":"180",
    "value": null,
    "xtype": "input"
  },
  {
    "id": "registeredCity",
    "defaultValue": null,
    "disabled": false,
    "link": false,
    "links": [],
    "name":"市",
    "placeholder": "市",
    "class":'city',
    "vivoNotWrite":true,
    "required": true,
    "selectDetail": [],
    "show": false,
    "sort": false,
    "span": 24,
    "width":"180",
    "value": null,
    "xtype": "input"
  },
  {
    "id": "registeredDetailAddress",
    "defaultValue": null,
    "disabled": false,
    "link": false,
    "links": [],
    "name":"详细地址",
    "placeholder": "详细地址",
    "class":'street',
    "vivoNotWrite":true,
    "required": true,
    "selectDetail": [],
    "show": false,
    "sort": false,
    "span": 24,
    "width":"180",
    "value": null,
    "xtype": "input"
  },
]

转载于:https://my.oschina.net/u/4099729/blog/3093251

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
后台采用apache服务器下的cgi处理c语言做微信小程序后台逻辑的脚本映射。PC端的服务器和客户端都是基于c语言写的。采用mysql数据库进行用户数据和聊天记录的存储。.zip C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值