我的编程空间,编程开发者的网络收藏夹
学习永远不晚

vue遍历中存在el-form问题怎么解决

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

vue遍历中存在el-form问题怎么解决

这篇“vue遍历中存在el-form问题怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue遍历中存在el-form问题怎么解决”文章吧。

    vue遍历存在el-form之踩坑

    vue遍历中存在el-form问题怎么解决

    初版

    <template>  <div class="message-templete-style">    <div class="title">短信通知模板      <el-tooltip popper-class="tooltip-style" content="请到阿里云短信平台申请短信权限" placement="bottom">        <i class="h-icon-help" :offset="85"></i>      </el-tooltip></div>    <el-form :model="numberForm" ref="numberForm" :rules="numberFormRule" label-width="100px" class="number-form">      <el-form-item label="测试手机号" prop="phoneNumber">        <el-input v-model="numberForm.phoneNumber"></el-input>      </el-form-item>      <el-form-item class="btn">        <el-button type="primary" @click="submitForm">保存</el-button>      </el-form-item>    </el-form>    <el-tabs v-model="activeName" @tab-click="handleClick">      <el-tab-pane v-for="item in tabList" :key="item.id" :label="item.name|templateTypeFilter " :name="item.name">                <!-- <el-scrollbar wrap-class="scrollbar-wrap"> -->        <el-row :gutter="12">          <el-col v-for="(itemCard, index) in item.cardList" :key="itemCard.id" :xs="8" :sm="8" :md="8" :lg="8" :xl="6">            <div class="card-wrap">              <div class="top-style">                <div class="card-title">{{ itemCard.templateName }}</div>                <el-button type="text" @click="sendMessage(itemCard.templateCode)" :disabled="itemCard.templateCode ? false: true">发送</el-button>              </div>              <div class="content-style">                <div><h5>通知对象</h5> {{ itemCard.notifyParty | notifyPartyFilter }}</div>                <div><h5>远程会议</h5> {{ itemCard.remoteMeeting | remoteMeetingFilter }}</div>                <div><h5>申请模板</h5> 模板名称/内容                  <el-popover width="300" trigger="hover" popper-class="detail-pop-style">                    <p>模板名称 <i class="h-icon-copy" @click="copyText(itemCard.templateName, '名称')"></i></p>                    <div class="title">{{ itemCard.templateName }}</div>                    <p>模板内容<i class="h-icon-copy" @click="copyText(itemCard.templateContent, '内容')"></i></p>                    <!-- \n -->                    <div >{{ itemCard.templateContent }}</div>                    <!--  -->                    <!-- <div v-html="itemCard.templateContent"></div> -->                    <i slot="reference" class="h-icon-details"></i>                  </el-popover>                </div>                <div class="code-style"><h5>模板code</h5><span class="code-width">{{ itemCard.templateCode || '' }}</span>                  <el-popover v-model="itemCard.visible" popper-class="code-pop-style">                    <el-form :model="item" ref="codeForm" label-position="top" class="code-form">                      <el-form-item label="模板code" :prop="'cardList.' + index + '.templateCodeValue'">                        <el-input v-model="itemCard.templateCodeValue"></el-input>                      </el-form-item>                      <div class="btn-style">                        <el-button type="primary" @click.native="confirm(index, itemCard)">确定</el-button>                        <el-button @click="itemCard.visible = false">取消</el-button>                      </div>                    </el-form>                    <i slot="reference" class="h-icon-edit" @click="openInit(itemCard)"></i>                  </el-popover>                </div>              </div>            </div>          </el-col>        </el-row>        <!-- </el-scrollbar> -->      </el-tab-pane>    </el-tabs>  </div></template>
    <script>import rules from '@/lib/rules';export default {  filters: {    templateTypeFilter: value => {      switch (value) {        case 'MEETING_BEFORE':          return '会前通知';        case 'MEETING_DURING':          return '会中通知';        case 'MEETING_AFTER':          return '会后通知';        case 'NOTICE_TIMING':          return '定时提醒';        case 'USER_MANAGEMENT':          return '用户管理';        default:          return;      }    },    remoteMeetingFilter: value => {      switch (value) {        case 'YES':          return '有';        case 'NO':          return '无';        default:          return;      }    },    notifyPartyFilter: value => {      switch (value) {        case 'CC':          return '抄送人';        case 'MEMBER':          return '与会人';        case 'MEMBER_CC':          return '与会人和抄送人';        case 'REGISTRANT':          return '注册人';        case 'CREATOR':          return '发起人';        default:          return;      }    }  },  data() {    return {      activeName: 'NOTICE_TIMING', // 当前激活的tab      successPhoneNumber: '', // 保存成功的测试手机号      tabList: [        // {        //   id: 1,        //   name: 'hqtz',        //   cardList: [        //     {        //       id: 1,        //       templateName: '预定会议通知1', // ,模板名称        //       isSend: true, // 是否发送        //       notifyParty: '发起人', // 通知对象        //       remoteMeeting: true, // 是否支持远程会议        //       templateContent: 'xx', // 模板内容        //       templateCode: 'cc' // 模板code,        //       visible: false, // 是否开启弹框        //     }        //   ]        // }, {        //   id: 2,        //   name: 'hztz',        //   cardList: []        // }, {        //   id: 3,        //   name: 'hhtz',        //   cardList: []        // }, {        //   id: 4,        //   name: 'dstz',        //   cardList: []        // }, {        //   id: 5,        //   name: 'yhgl',        //   cardList: []        // }      ],      numberForm: { // 测试手机号        phoneNumber: ''      },      numberFormRule: {        phoneNumber: [rules.required('phoneNumber'), rules.phoneNumber()]      }      // codeFormRule: {      //   templateCodeValue: [      //     {      //       required: true,      //       message: '请输入模板code'      //       // trigger: 'blur'      //     }      //   ]      // }    };  },  created() {    this.getPhoneNumber();    this.getData();  },  methods: {    // 获取测试手机号    async getPhoneNumber() {      const res = await this.$get('meeting/aLiYunSmsSdk/v1/getALiYunSmsTestPhone');      this.numberForm.phoneNumber = res || '';      this.successPhoneNumber = res || '';    },    // 获取短信模板    async getData() {      const res = await this.$get('meeting/template/v1/getSmsTemplateInfo');      let dataList = res || [];      const newTabList = dataList.map((item, index) => {        return {          id: index + 1,          name: item.noticePeriodName,          cardList: item.noticePeriodData ? item.noticePeriodData.map(item_ => {            return {              id: item_.id,              templateName: item_.templateName, // 模板名称              isSend: true, // 是否发送              notifyParty: item_.notifyObject, // 通知对象              remoteMeeting: item_.videoConference, // 是否支持远程会议              templateContent: item_.templateContent, // 模板内容              templateCode: item_.templateCode, // 模板code              templateCodeValue: item_.templateCode, // 输入的code              visible: false            };          }) : []        };      });      console.log(newTabList);      this.tabList = JSON.parse(JSON.stringify(newTabList));    },    // 保存测试手机号    submitForm() {      this.$refs.numberForm.validate(async valid => {        if (valid) {          const res = await this.$get(`meeting/aLiYunSmsSdk/v1/saveALiYunSmsTestPhone/${this.numberForm.phoneNumber}`);          this.successPhoneNumber = res || '';          this.$message({            message: '手机号保存成功,可用于有code码的模板进行短信测试!',            type: 'success'          });        }      });    },    // 切换tab    handleClick(tab, event) {      console.log(tab, event);    },    // 发送    async sendMessage(code) {      if (!this.successPhoneNumber) {        return this.$message({          message: '测试手机号未保存!',          type: 'warning'        });      }      await this.$get(`meeting/sms/v1/sendSmsTest/${this.successPhoneNumber}/$[code]`);    },    // 复制    copyText(text) {      console.log(text);//获取input对象      //创建input标签      var input = document.createElement('textarea');      //将input的值设置为需要复制的内容      input.value = text;      //添加input标签      document.body.appendChild(input);      //选中input标签      input.select();      //执行复制      document.execCommand('copy');      //成功提示信息      this.$message({        message: '已复制成功!',        type: 'success'      });      //移除input标签      document.body.removeChild(input);    },    // 开启code弹框    openInit(item) {      item.templateCodeValue = item.templateCode;    },    // 确认code    async confirm(index, item) {      console.log(index, Boolean(item.templateCodeValue));      if (!item.templateCodeValue) {        return this.$message({          message: '模板code不能为空!',          type: 'warning'        });      }      if (item.templateCodeValue) {        await this.$get(`meeting/template/v1/bindingSmsTemplateCode/${item.id}/${item.templateCodeValue}`);        item.templateCode = item.templateCodeValue;        item.visible = false;      }      this.$refs.codeForm[index].focusFirstField();    }    // this.$refs.codeForm[index].validate(async valid => {    //   if (valid) {    //     console.log(valid);    //     console.log(item);    //     await this.$get(`meeting/template/v1/bindingSmsTemplateCode/${item.id}/${item.templateCodeValue}`);    //     item.templateCode = item.templateCodeValue;    //     item.visible = false;    //   }    // });    // }      }};</script>
    <style lang="less">.message-templete-style {  height: 100%;  // background: rgb(253, 243, 243);  overflow: hidden;  .title{    font-size: 16px;    color:#000000;    font-weight: 900;    padding-bottom: 10px;    .h-icon-help{      position: absolute;      font-size: 26px;      cursor: pointer;      padding-left:2px;      margin-top:-3px;    }  }  .number-form{    height:64px;    padding-top:12px;    background: #F7F8F9;    border-radius: 2px;    display: flex;    .el-form-item{      margin-bottom: 20px;    }    .btn .el-form-item__content{      margin-left: 10px !important;    }  }  .el-tabs{    height: calc(100% - 94px);    // background: #2080F7;    padding-top:12px;    // .scrollbar-wrap{    //   // max-height: 700px;    // }    .el-tabs__item{      padding:0px 32px;      span{        opacity: 0.7;        font-size: 14px;      }    }    .el-tabs__item.is-active{      color: #000000;      font-weight: 900;    }    .el-tabs__item:hover{      color: #000000;      font-weight: 900;    }    .el-tabs__active-bar{      background-color: #2080F7;    }    .el-tabs__header{      padding-bottom: 10px;    }    .el-tabs__content{      height:calc(100% - 51px);      // background: #e8eef5;      overflow: auto;      // 重置滚动条位置      &::-webkit-scrollbar {        width: 4px;        height: 3px;        background: transparent;      }      &::-webkit-scrollbar-thumb {        background: transparent;        border-radius: 4px;      }      &:hover::-webkit-scrollbar-thumb {        background: hsla(0, 0%, 53%, 0.5);      }      &:hover::-webkit-scrollbar-track {        background: hsla(0, 0%, 53%, 0);      }      .el-col{        margin-bottom: 12px;      }      .card-wrap{        padding: 16px 20px;        background: #F7F8F9;        border-radius: 2px;        .top-style{          display: flex;          justify-content: space-between;          align-items: center;          font-size: 14px;          font-weight: 900;          line-height: 14px;          padding-bottom: 20px;          .card-title{            color: #000000;          }          .el-button {            border: 0px;            height:16px;            margin-top:-4px;            span{              line-height: 14px;              font-size: 14px;              color:#2080F7;            }          }        }        .content-style{          div{            position: relative;            opacity: 0.9;            font-size: 14px;            color: #000000;            line-height: 24px;            h5{              display: inline-block;              opacity: 0.5;              font-size: 14px;              color: #000000;              line-height: 24px;              padding-right:16px;              font-weight: normal;            }            .h-icon-details, .h-icon-edit{              position: absolute;              font-size: 22px;              cursor: pointer;              padding-left:8px;            }            .h-icon-edit{              margin-top:-12px;            }          }          .code-style{            display: flex;            align-items: center;            .code-width{              max-width:calc(100% - 104px);              text-overflow: ellipsis;              overflow: hidden;              white-space: nowrap;                            line-height: 14px;              font-size: 14px;              font-weight: normal;            }          }        }      }    }  }}.detail-pop-style{  background: #FFFFFF;  box-shadow: 0 0 16px 0 rgba(0,0,0,0.20), 0 16px 32px 0 rgba(0,0,0,0.12);  p{    position: relative;    font-weight: 900;    font-size: 14px;    line-height: 14px;    color: #000000;    padding-bottom: 8px;    .h-icon-copy{      color:#1C7FFF;      position: absolute;      font-size: 20px;      cursor: pointer;      padding-left:4px;      margin-top:-3px;    }  }  .title{    padding-bottom:16px;  }  div{    font-size: 14px;    color: rgba(0,0,0,0.50);    line-height: 24px;  }}.code-pop-style{  background: #FFFFFF;  box-shadow: 0 0 16px 0 rgba(0,0,0,0.20), 0 16px 32px 0 rgba(0,0,0,0.12);  .el-form-item__content{    margin-left:0px;  }  .btn-style{    float: right;  }}.tooltip-style{  background: #000000;}</style>

    完善版

    <template>  <div class="message-templete-style">    <div class="title">短信通知模板      <el-tooltip popper-class="tooltip-style" content="请到阿里云短信平台申请短信权限" placement="bottom">        <i class="h-icon-help" :offset="85"></i>      </el-tooltip></div>    <el-form :model="numberForm" ref="numberForm" :rules="numberFormRule" label-width="100px" class="number-form">      <el-form-item label="测试手机号" prop="phoneNumber">        <el-input v-model="numberForm.phoneNumber"></el-input>      </el-form-item>      <el-form-item class="btn">        <el-button type="primary" @click="submitForm">保存</el-button>      </el-form-item>    </el-form>    <el-tabs v-model="activeName" @tab-click="handleClick">      <!-- tab头部 -->      <el-tab-pane v-for="item in tabList" :key="item.key" :label="item.label|templateTypeFilter " :name="item.label"></el-tab-pane>      <!-- tab内容 -->      <el-row :gutter="12">        <el-col v-for="(itemCard) in templateList" :key="itemCard.id" :xs="8" :sm="8" :md="8" :lg="8" :xl="6">          <div class="card-wrap">            <div class="top-style">              <div class="card-title">{{ itemCard.templateName }}</div>              <el-button type="text" @click="sendMessage(itemCard.templateCode)" :disabled="itemCard.templateCode ? false: true">发送</el-button>            </div>            <div class="content-style">              <div><h5>通知对象</h5> {{ itemCard.notifyParty | notifyPartyFilter }}</div>              <div><h5>远程会议</h5> {{ itemCard.remoteMeeting | remoteMeetingFilter }}</div>              <div><h5>申请模板</h5> 模板名称/内容                <el-popover width="300" trigger="hover" popper-class="detail-pop-style">                  <p>模板名称 <i class="h-icon-copy" @click="copyText(itemCard.templateName, '名称')"></i></p>                  <div class="title">{{ itemCard.templateName }}</div>                  <p>模板内容<i class="h-icon-copy" @click="copyText(itemCard.templateContent, '内容')"></i></p>                  <div >{{ itemCard.templateContent }}</div>                  <i slot="reference" class="h-icon-details"></i>                </el-popover>              </div>              <div class="code-style"><h5>模板code</h5><span class="code-width">{{ itemCard.templateCode || '' }}</span>                <el-popover v-model="itemCard.visible" popper-class="code-pop-style">                  <el-form :model="itemCard" :ref="itemCard.id" label-position="top" class="code-form">                    <el-form-item label="模板code" prop="templateCodeValue" :rules="codeFormRule.templateCodeValue">                      <el-input v-model="itemCard.templateCodeValue"></el-input>                    </el-form-item>                    <div class="btn-style">                      <el-button type="primary" @click="confirm(itemCard)">确定</el-button>                      <el-button @click="itemCard.visible = false">取消</el-button>                    </div>                  </el-form>                  <i slot="reference" class="h-icon-edit" @click="openInit(itemCard)"></i>                </el-popover>              </div>            </div>          </div>        </el-col>      </el-row>    </el-tabs>  </div></template>
    <script>import rules from '@/lib/rules';export default {  filters: {    templateTypeFilter: value => {      switch (value) {        case 'MEETING_BEFORE':          return '会前通知';        case 'MEETING_DURING':          return '会中通知';        case 'MEETING_AFTER':          return '会后通知';        case 'NOTICE_TIMING':          return '定时提醒';        case 'USER_MANAGEMENT':          return '用户管理';        default:          return;      }    },    remoteMeetingFilter: value => {      switch (value) {        case 'YES':          return '有';        case 'NO':          return '无';        default:          return;      }    },    notifyPartyFilter: value => {      switch (value) {        case 'CC':          return '抄送人';        case 'MEMBER':          return '与会人';        case 'MEMBER_CC':          return '与会人和抄送人';        case 'REGISTRANT':          return '注册人';        case 'CREATOR':          return '发起人';        default:          return;      }    }  },  data() {    return {      activeName: 'NOTICE_TIMING', // 当前激活的tab      successPhoneNumber: '', // 保存成功的测试手机号      tabList: [  // 获取的所有数据 重组数据结构如下:        // {        //   key: 1,        //   label: 'MEETING_AFTER',        //   contentList: []        // },        // {        //   key: 2,        //   label: 'MEETING_BEFORE',        //   contentList: []        // },        // {        //   key: 3,        //   label: 'MEETING_DURING',        //   contentList: []        // },        // {        //   key: 4,        //   label: 'NOTICE_TIMING',        //   contentList: []        // },        // {        //   key: 5,        //   label: 'USER_MANAGEMENT',        //   contentList: []        // }      ],      templateList: [], // 要渲染的模板列表      numberForm: {  // 测试手机号        phoneNumber: ''      },      numberFormRule: { // 测试手机号校验        phoneNumber: [rules.required('phoneNumber'), rules.phoneNumber()]      },      codeFormRule: { // 模板code校验        templateCodeValue: [          // rules.required('templateCodeValue')          {            required: true,            message: '请输入模板code'            // trigger: 'blur'          }        ]      }    };  },  created() {    this.getPhoneNumber();    this.getData();  },  methods: {    // 获取测试手机号    async getPhoneNumber() {      const res = await this.$get('meeting/aLiYunSmsSdk/v1/getALiYunSmsTestPhone');      this.numberForm.phoneNumber = res || '';      this.successPhoneNumber = res || '';    },    // 获取短信模板    async getData() {      const res = await this.$get('meeting/template/v1/getSmsTemplateInfo');      let dataList = res || [];      const newTabList = dataList.map((item, index) => {        return {          key: index + 1,          label: item.noticePeriodName,          contentList: item.noticePeriodData ? item.noticePeriodData.map(item_ => {            return {              id: item_.id,              templateName: item_.templateName, // 模板名称              isSend: true, // 是否发送              notifyParty: item_.notifyObject, // 通知对象              remoteMeeting: item_.videoConference, // 是否支持远程会议              templateContent: item_.templateContent, // 模板内容              templateCode: item_.templateCode, // 模板code              templateCodeValue: item_.templateCode, // 双向绑定的code              visible: false            };          }) : []        };      });      this.tabList = JSON.parse(JSON.stringify(newTabList));      this.templateList = newTabList[0] ? JSON.parse(JSON.stringify(newTabList))[0].contentList : [];    },    // 保存测试手机号    submitForm() {      this.$refs.numberForm.validate(async valid => {        if (valid) {          const res = await this.$get(`meeting/aLiYunSmsSdk/v1/saveALiYunSmsTestPhone/${this.numberForm.phoneNumber}`);          this.successPhoneNumber = res || '';          this.$message({            message: '手机号保存成功,可用于有code码的模板进行短信测试!',            type: 'success'          });        }      });    },    // 切换tab (按理此处可以通过接口获取,因为数据少,所以后端一次性返回,前端自行处理)    handleClick(tab) {      const newArr = JSON.parse(JSON.stringify(this.tabList));      let newTemplateList = JSON.parse(JSON.stringify(this.templateList));      for (let i = 0; i < newArr.length; i++) {        if (newArr[i].label === tab.name) {          newTemplateList = newArr[i].contentList;        }      }      this.templateList = newTemplateList;    },    // 发送    async sendMessage(code) {      if (!this.successPhoneNumber) {        return this.$message({          message: '测试手机号未保存!',          type: 'warning'        });      }      await this.$get(`meeting/sms/v1/sendSmsTest/${this.successPhoneNumber}/$[code]`);    },    // 复制    copyText(text) {      console.log(text);//获取input对象      //创建input标签      var input = document.createElement('textarea');      //将input的值设置为需要复制的内容      input.value = text;      //添加input标签      document.body.appendChild(input);      //选中input标签      input.select();      //执行复制      document.execCommand('copy');      //成功提示信息      this.$message({        message: '已复制成功!',        type: 'success'      });      //移除input标签      document.body.removeChild(input);    },    // 开启code弹框    openInit(item) {      item.templateCodeValue = item.templateCode;    },    // 确认code    async confirm(item) {      this.$refs[item.id][0].validate(async valid => {        if (valid) {          await this.$get(`meeting/template/v1/bindingSmsTemplateCode/${item.id}/${item.templateCodeValue}`);          item.templateCode = item.templateCodeValue;          item.visible = false;        }      });    }  }};</script>
    <style lang="less">.message-templete-style {  height: 100%;  // background: rgb(253, 243, 243);  overflow: hidden;  .title{    font-size: 16px;    color:#000000;    font-weight: 900;    padding-bottom: 10px;    .h-icon-help{      position: absolute;      font-size: 26px;      cursor: pointer;      padding-left:2px;      margin-top:-3px;    }  }  .number-form{    height:64px;    padding-top:12px;    background: #F7F8F9;    border-radius: 2px;    display: flex;    .el-form-item{      margin-bottom: 20px;    }    .btn .el-form-item__content{      margin-left: 10px !important;    }  }  .el-tabs{    height: calc(100% - 94px);    // background: #2080F7;    padding-top:12px;    .el-tabs__item{      padding:0px 32px;      span{        opacity: 0.7;        font-size: 14px;      }    }    .el-tabs__item.is-active{      color: #000000;      font-weight: 900;    }    .el-tabs__item:hover{      color: #000000;      font-weight: 900;    }    .el-tabs__active-bar{      background-color: #2080F7;    }    .el-tabs__header{      padding-bottom: 10px;    }    .el-tabs__content{      height:calc(100% - 51px);      // background: #e8eef5;      overflow: auto;      // 重置滚动条位置      &::-webkit-scrollbar {        width: 4px;        height: 3px;        background: transparent;      }      &::-webkit-scrollbar-thumb {        background: transparent;        border-radius: 4px;      }      &:hover::-webkit-scrollbar-thumb {        background: hsla(0, 0%, 53%, 0.5);      }      &:hover::-webkit-scrollbar-track {        background: hsla(0, 0%, 53%, 0);      }      .el-col{        margin-bottom: 12px;      }      .card-wrap{        padding: 16px 20px;        background: #F7F8F9;        border-radius: 2px;        .top-style{          display: flex;          justify-content: space-between;          align-items: center;          font-size: 14px;          font-weight: 900;          line-height: 14px;          padding-bottom: 20px;          .card-title{            color: #000000;          }          .el-button {            border: 0px;            height:16px;            margin-top:-4px;            span{              line-height: 14px;              font-size: 14px;              color:#2080F7;            }          }        }        .content-style{          div{            position: relative;            opacity: 0.9;            font-size: 14px;            color: #000000;            line-height: 24px;            h5{              display: inline-block;              opacity: 0.5;              font-size: 14px;              color: #000000;              line-height: 24px;              padding-right:16px;              font-weight: normal;            }            .h-icon-details, .h-icon-edit{              position: absolute;              font-size: 22px;              cursor: pointer;              padding-left:8px;            }            .h-icon-edit{              margin-top:-12px;            }          }          .code-style{            display: flex;            align-items: center;            .code-width{              max-width:calc(100% - 104px);              text-overflow: ellipsis;              overflow: hidden;              white-space: nowrap;                            line-height: 14px;              font-size: 14px;              font-weight: normal;            }          }        }      }    }  }}.detail-pop-style{  background: #FFFFFF;  box-shadow: 0 0 16px 0 rgba(0,0,0,0.20), 0 16px 32px 0 rgba(0,0,0,0.12);  p{    position: relative;    font-weight: 900;    font-size: 14px;    line-height: 14px;    color: #000000;    padding-bottom: 8px;    .h-icon-copy{      color:#1C7FFF;      position: absolute;      font-size: 20px;      cursor: pointer;      padding-left:4px;      margin-top:-3px;    }  }  .title{    padding-bottom:16px;  }  div{    font-size: 14px;    color: rgba(0,0,0,0.50);    line-height: 24px;  }}.code-pop-style{  background: #FFFFFF;  box-shadow: 0 0 16px 0 rgba(0,0,0,0.20), 0 16px 32px 0 rgba(0,0,0,0.12);  .el-form-item__content{    margin-left:0px;  }  .btn-style{    float: right;  }}.tooltip-style{  background: #000000;}</style>

    抽组件版

    父组件:<template>  <div class="message-templete-style">    <div class="title">短信通知模板      <el-tooltip popper-class="tooltip-style" content="请到阿里云短信平台申请短信权限" placement="bottom">        <i class="h-icon-help" :offset="85"></i>      </el-tooltip></div>    <el-form :model="numberForm" ref="numberForm" :rules="numberFormRule" label-width="100px" class="number-form">      <el-form-item label="测试手机号" prop="phoneNumber">        <el-input v-model="numberForm.phoneNumber"></el-input>      </el-form-item>      <el-form-item class="btn">        <el-button type="primary" @click="submitForm">保存</el-button>      </el-form-item>    </el-form>    <el-tabs v-model="activeName" @tab-click="handleClick">      <!-- tab头部 -->      <el-tab-pane v-for="item in tabList" :key="item.key" :label="item.label|templateTypeFilter " :name="item.label"></el-tab-pane>      <!-- tab内容 -->      <el-row :gutter="12">        <el-col v-for="(itemCard) in templateList" :key="itemCard.id" :xs="8" :sm="8" :md="8" :lg="8" :xl="6">          <template-card :success-phone-number="successPhoneNumber" :item-card="itemCard"></template-card>          <!-- <div class="card-wrap">            <div class="top-style">              <div class="card-title">{{ itemCard.templateName }}</div>              <el-button type="text" @click="sendMessage(itemCard.templateCode)" :disabled="itemCard.templateCode ? false: true">发送</el-button>            </div>            <div class="content-style">              <div><h5>通知对象</h5> {{ itemCard.notifyParty | notifyPartyFilter }}</div>              <div><h5>远程会议</h5> {{ itemCard.remoteMeeting | remoteMeetingFilter }}</div>              <div><h5>申请模板</h5> 模板名称/内容                <el-popover width="300" trigger="hover" popper-class="detail-pop-style">                  <p>模板名称 <i class="h-icon-copy" @click="copyText(itemCard.templateName, '名称')"></i></p>                  <div class="title">{{ itemCard.templateName }}</div>                  <p>模板内容<i class="h-icon-copy" @click="copyText(itemCard.templateContent, '内容')"></i></p>                  <div >{{ itemCard.templateContent }}</div>                  <i slot="reference" class="h-icon-details"></i>                </el-popover>              </div>              <div class="code-style"><h5>模板code</h5><span class="code-width">{{ itemCard.templateCode || '' }}</span>                <el-popover v-model="itemCard.visible" popper-class="code-pop-style">                  <el-form :model="itemCard" :ref="itemCard.id" label-position="top" class="code-form">                    <el-form-item label="模板code" prop="templateCodeValue" :rules="codeFormRule.templateCodeValue">                      <el-input v-model="itemCard.templateCodeValue"></el-input>                    </el-form-item>                    <div class="btn-style">                      <el-button type="primary" @click="confirm(itemCard)">确定</el-button>                      <el-button @click="itemCard.visible = false">取消</el-button>                    </div>                  </el-form>                  <i slot="reference" class="h-icon-edit" @click="openInit(itemCard)"></i>                </el-popover>              </div>            </div>          </div> -->        </el-col>      </el-row>    </el-tabs>  </div></template>
    <script>import rules from '@/lib/rules';import templateCard from '@/components/view/SettingManage/templateCard.vue';export default {  components: {    templateCard  },  filters: {    templateTypeFilter: value => {      switch (value) {        case 'MEETING_BEFORE':          return '会前通知';        case 'MEETING_DURING':          return '会中通知';        case 'MEETING_AFTER':          return '会后通知';        case 'NOTICE_TIMING':          return '定时提醒';        case 'USER_MANAGEMENT':          return '用户管理';        default:          return;      }    }  },  data() {    return {      activeName: 'NOTICE_TIMING', // 当前激活的tab      successPhoneNumber: '', // 保存成功的测试手机号      tabList: [  // 获取的所有数据 重组数据结构如下:        // {        //   key: 1,        //   label: 'MEETING_AFTER',        //   contentList: []        // },        // {        //   key: 2,        //   label: 'MEETING_BEFORE',        //   contentList: []        // },        // {        //   key: 3,        //   label: 'MEETING_DURING',        //   contentList: []        // },        // {        //   key: 4,        //   label: 'NOTICE_TIMING',        //   contentList: []        // },        // {        //   key: 5,        //   label: 'USER_MANAGEMENT',        //   contentList: []        // }      ],      templateList: [], // 要渲染的模板列表      numberForm: {  // 测试手机号        phoneNumber: ''      },      numberFormRule: { // 测试手机号校验        phoneNumber: [rules.required('phoneNumber'), rules.phoneNumber()]      },      codeFormRule: { // 模板code校验        templateCodeValue: [          // rules.required('templateCodeValue')          {            required: true,            message: '请输入模板code'            // trigger: 'blur'          }        ]      }    };  },  created() {    this.getPhoneNumber();    this.getData();  },  methods: {    // 获取测试手机号    async getPhoneNumber() {      const res = await this.$get('meeting/aLiYunSmsSdk/v1/getALiYunSmsTestPhone');      this.numberForm.phoneNumber = res || '';      this.successPhoneNumber = res || '';    },    // 获取短信模板    async getData() {      const res = await this.$get('meeting/template/v1/getSmsTemplateInfo');      let dataList = res || [];      const newTabList = dataList.map((item, index) => {        return {          key: index + 1,          label: item.noticePeriodName,          contentList: item.noticePeriodData ? item.noticePeriodData.map(item_ => {            return {              id: item_.id,              templateName: item_.templateName, // 模板名称              isSend: true, // 是否发送              notifyParty: item_.notifyObject, // 通知对象              remoteMeeting: item_.videoConference, // 是否支持远程会议              templateContent: item_.templateContent, // 模板内容              templateCode: item_.templateCode, // 模板code              templateCodeValue: item_.templateCode, // 双向绑定的code              visible: false            };          }) : []        };      });      this.tabList = JSON.parse(JSON.stringify(newTabList));      this.templateList = newTabList[0] ? JSON.parse(JSON.stringify(newTabList))[0].contentList : [];    },    // 保存测试手机号    submitForm() {      this.$refs.numberForm.validate(async valid => {        if (valid) {          const res = await this.$get(`meeting/aLiYunSmsSdk/v1/saveALiYunSmsTestPhone/${this.numberForm.phoneNumber}`);          this.successPhoneNumber = res || '';          this.$message({            message: '手机号保存成功,可用于有code码的模板进行短信测试!',            type: 'success'          });        }      });    },    // 切换tab (按理此处可以通过接口获取,因为数据少,所以后端一次性返回,前端自行处理)    handleClick(tab) {      const newArr = JSON.parse(JSON.stringify(this.tabList));      let newTemplateList = JSON.parse(JSON.stringify(this.templateList));      for (let i = 0; i < newArr.length; i++) {        if (newArr[i].label === tab.name) {          newTemplateList = newArr[i].contentList;        }      }      this.templateList = newTemplateList;    }  }};</script>
    <style lang="less" scoped>.message-templete-style {  height: 100%;  // background: rgb(253, 243, 243);  overflow: hidden;  .title{    font-size: 16px;    color:#000000;    font-weight: 900;    padding-bottom: 10px;    .h-icon-help{      position: absolute;      font-size: 26px;      cursor: pointer;      padding-left:2px;      margin-top:-3px;    }  }  .number-form{    height:64px;    padding-top:12px;    background: #F7F8F9;    border-radius: 2px;    display: flex;    .el-form-item{      margin-bottom: 20px;    }    .btn .el-form-item__content{      margin-left: 10px !important;    }  }  .el-tabs{    height: calc(100% - 94px);    // background: #2080F7;    padding-top:12px;    .el-tabs__item{      padding:0px 32px;      span{        opacity: 0.7;        font-size: 14px;      }    }    .el-tabs__item.is-active{      color: #000000;      font-weight: 900;    }    .el-tabs__item:hover{      color: #000000;      font-weight: 900;    }    .el-tabs__active-bar{      background-color: #2080F7;    }    .el-tabs__header{      padding-bottom: 10px;    }    .el-tabs__content{      height:calc(100% - 51px);      // background: #e8eef5;      overflow: auto;      // 重置滚动条位置      &::-webkit-scrollbar {        width: 4px;        height: 3px;        background: transparent;      }      &::-webkit-scrollbar-thumb {        background: transparent;        border-radius: 4px;      }      &:hover::-webkit-scrollbar-thumb {        background: hsla(0, 0%, 53%, 0.5);      }      &:hover::-webkit-scrollbar-track {        background: hsla(0, 0%, 53%, 0);      }      .el-col{        margin-bottom: 12px;      }    }  }}.tooltip-style{  background: #000000;}</style>
    ```javascript子组件:<template>  <div class="card-wrap">    <div class="top-style">      <div class="card-title">{{ itemCard.templateName }}</div>      <el-button type="text" @click="sendMessage(itemCard.templateCode)" :disabled="itemCard.templateCode ? false: true">发送</el-button>    </div>    <div class="content-style">      <div><h5>通知对象</h5> {{ itemCard.notifyParty | notifyPartyFilter }}</div>      <div><h5>远程会议</h5> {{ itemCard.remoteMeeting | remoteMeetingFilter }}</div>      <div><h5>申请模板</h5> 模板名称/内容        <el-popover width="300" trigger="hover" popper-class="detail-pop-style">          <p>模板名称 <i class="h-icon-copy" @click="copyText(itemCard.templateName, '名称')"></i></p>          <div class="title">{{ itemCard.templateName }}</div>          <p>模板内容<i class="h-icon-copy" @click="copyText(itemCard.templateContent, '内容')"></i></p>          <div >{{ itemCard.templateContent }}</div>          <i slot="reference" class="h-icon-details"></i>        </el-popover>      </div>      <div class="code-style"><h5>模板code</h5><span class="code-width">{{ itemCard.templateCode || '' }}</span>        <el-popover v-model="itemCard.visible" popper-class="code-pop-style">          <el-form :model="itemCard" :ref="itemCard.id" label-position="top" class="code-form">            <el-form-item label="模板code" prop="templateCodeValue" :rules="codeFormRule.templateCodeValue">              <el-input v-model="itemCard.templateCodeValue"></el-input>            </el-form-item>            <div class="btn-style">              <el-button type="primary" @click="confirm(itemCard)">确定</el-button>              <el-button @click="itemCard.visible = false">取消</el-button>            </div>          </el-form>          <i slot="reference" class="h-icon-edit" @click="openInit(itemCard)"></i>        </el-popover>      </div>    </div>  </div></template>
    <script>export default {  filters: {    remoteMeetingFilter: value => {      switch (value) {        case 'YES':          return '有';        case 'NO':          return '无';        default:          return;      }    },    notifyPartyFilter: value => {      switch (value) {        case 'CC':          return '抄送人';        case 'MEMBER':          return '与会人';        case 'MEMBER_CC':          return '与会人和抄送人';        case 'REGISTRANT':          return '注册人';        case 'CREATOR':          return '发起人';        default:          return;      }    }  },  props: {    successPhoneNumber: {      type: String,      default: ''    },    itemCard: {      type: Object,      default: () => ({})    }  },  data() {    return {      codeFormRule: { // 模板code校验        templateCodeValue: [          // rules.required('templateCodeValue')          {            required: true,            message: '请输入模板code'            // trigger: 'blur'          }        ]      }    };  },  methods: {  // 发送    async sendMessage(code) {      if (!this.successPhoneNumber) {        return this.$message({          message: '测试手机号未保存!',          type: 'warning'        });      }      await this.$get(`meeting/sms/v1/sendSmsTest/${this.successPhoneNumber}/$[code]`);    },    // 复制    copyText(text) {      console.log(text);//获取input对象      //创建input标签      var input = document.createElement('textarea');      //将input的值设置为需要复制的内容      input.value = text;      //添加input标签      document.body.appendChild(input);      //选中input标签      input.select();      //执行复制      document.execCommand('copy');      //成功提示信息      this.$message({        message: '已复制成功!',        type: 'success'      });      //移除input标签      document.body.removeChild(input);    },    // 开启code弹框    openInit(item) {      item.templateCodeValue = item.templateCode;    },    // 确认code    confirm(item) {      this.$refs[item.id].validate(async valid => {        if (valid) {          await this.$get(`meeting/template/v1/bindingSmsTemplateCode/${item.id}/${item.templateCodeValue}`);          item.templateCode = item.templateCodeValue;          item.visible = false;        }      });    }  }};</script>
    <style lang='less' scoped>.card-wrap{  padding: 16px 20px;  background: #F7F8F9;  border-radius: 2px;  .top-style{    display: flex;    justify-content: space-between;    align-items: center;    font-size: 14px;    font-weight: 900;    line-height: 14px;    padding-bottom: 20px;    .card-title{      color: #000000;    }    /deep/.el-button {      border: 0px;      height:16px;      margin-top:-4px;      span{        line-height: 14px;        font-size: 14px;        color:#2080F7;      }    }  }  .content-style{    div{      position: relative;      opacity: 0.9;      font-size: 14px;      color: #000000;      line-height: 24px;      h5{        display: inline-block;        opacity: 0.5;        font-size: 14px;        color: #000000;        line-height: 24px;        padding-right:16px;        font-weight: normal;      }      .h-icon-details, .h-icon-edit{        position: absolute;        font-size: 22px;        cursor: pointer;        padding-left:8px;      }      .h-icon-edit{        margin-top:-12px;      }    }    .code-style{      display: flex;      align-items: center;      .code-width{        max-width:calc(100% - 104px);        text-overflow: ellipsis;        overflow: hidden;        white-space: nowrap;                line-height: 14px;        font-size: 14px;        font-weight: normal;      }    }  }}.detail-pop-style{  background: #FFFFFF;  box-shadow: 0 0 16px 0 rgba(0,0,0,0.20), 0 16px 32px 0 rgba(0,0,0,0.12);  p{    position: relative;    font-weight: 900;    font-size: 14px;    line-height: 14px;    color: #000000;    padding-bottom: 8px;    .h-icon-copy{      color:#1C7FFF;      position: absolute;      font-size: 20px;      cursor: pointer;      padding-left:4px;      margin-top:-3px;    }  }  .title{    padding-bottom:16px;  }  div{    font-size: 14px;    color: rgba(0,0,0,0.50);    line-height: 24px;  }}.code-pop-style{  background: #FFFFFF;  box-shadow: 0 0 16px 0 rgba(0,0,0,0.20), 0 16px 32px 0 rgba(0,0,0,0.12);  .code-form{    /deep/ .el-form-item__content{      margin-left:0px;    }    .btn-style{      float: right;    }  }}</style>

    vue中el-form循环绑定

    在我们开发过程中,有时会遇到el-form循环绑定校验,并且后台返回的是动态表单list的形式,并且动态绑定是否必填

    <el-formref="addForm":model="submitForm"   //绑定的表单对象label-width="125px"    :rules="rules"  //绑定的校验规则><el-form-item v-for="(item,index) in formArr" :key="index" :label="item.fieldName + ' : ' " :required="item.isRequired==1?true:false" :prop="item.fieldIdentify"><el-input v-if="item.fieldIdentify=='AAA'"  type="text" v-model="submitForm.AAA"></el-input><el-input v-if="item.fieldIdentify=='BBB'"  type="text" v-model="submitForm.BBB"></el-input><el-input v-if="item.fieldIdentify=='CCC'"  type="text" v-model="submitForm.CCC"></el-input><el-form-item  class="textarea form_textarea" v-if="item.fieldIdentify=='DDD'" :prop="item.fieldIdentify"><el-input  type="textarea" v-model="submitForm.DDD"></el-input>        </el-form-item></el-form-item></el-form><script>export default {data(){return{submitForm:{AAA:'',BBB:'',CCC:'',DDD:''},//formArr数据类似formArr:[{fieldIdentify: "xxx",fieldName: "xxx",fieldValue: "xxx",isRequired: 1},{fieldIdentify: "xxx",fieldName: "xxx",fieldValue: "xxx",isRequired: 1},{fieldIdentify: "xxx",fieldName: "xxx",fieldValue: "xxx",isRequired: 1}],//注意在el-form-item的:prop值要和rules里面的值相同rules:{AAA:[{required: true, message: "AAA不能为空", trigger: ["blur","change"]}],BBB:[{required: true, message: "BBB不能为空", trigger: ["blur","change"]}],CCC:[{required: true, message: "CCC不能为空", trigger: ["blur","change"]}],DDD:[{required: true, message: "CCC不能为空", trigger: ["blur","change"]}]}}}}</script>

    以上就是关于“vue遍历中存在el-form问题怎么解决”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    vue遍历中存在el-form问题怎么解决

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    vue遍历中存在el-form问题怎么解决

    这篇“vue遍历中存在el-form问题怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue遍历中存在el-form
    2023-07-04

    vue遍历中存在el-form之踩坑记录

    这篇文章主要介绍了vue遍历中存在el-form之踩坑记录,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-13

    Java中Map循环遍历的效率问题怎么解决

    在Java中,Map的循环遍历可以通过使用不同的方法来提高效率:1. 使用entrySet()方法遍历:遍历Map的entrySet()集合,而不是使用keySet()或values()方法。这是因为entrySet()方法会返回一个包含键
    2023-08-15

    怎么解决TypeScript遍历对象属性的问题

    这篇文章主要讲解了“怎么解决TypeScript遍历对象属性的问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么解决TypeScript遍历对象属性的问题”吧!一、问题  比如下面的代码
    2023-06-25

    vue缓存问题怎么解决

    Vue缓存问题可以通过以下几种方式来解决:1. 使用路由的meta信息:在路由配置中,可以设置meta信息,包括是否需要缓存组件等。通过设置noCache为true,可以禁止组件缓存,如下所示:{path: /example,compone
    2023-05-23

    怎么用Java深度优先遍历解决迷宫问题

    本文小编为大家详细介绍“怎么用Java深度优先遍历解决迷宫问题”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么用Java深度优先遍历解决迷宫问题”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。什么是深度优先什么
    2023-06-29

    组件中多个el-upload存在导致上传图片失效问题怎么解决

    本篇内容介绍了“组件中多个el-upload存在导致上传图片失效问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!组件中多个el-u
    2023-07-05

    怎么在java中解决缓存穿透问题

    怎么在java中解决缓存穿透问题?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Java有哪些集合类Java中的集合主要分为四类:1、List列表:有序的,可重复的;2、Qu
    2023-06-14

    Vue项目中使用setTimeout存在的潜在问题及解决

    这篇文章主要介绍了Vue项目中使用setTimeout存在的潜在问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-28

    vue el-date-picker日期回显后无法改变问题怎么解决

    这篇文章主要介绍“vue el-date-picker日期回显后无法改变问题怎么解决”,在日常操作中,相信很多人在vue el-date-picker日期回显后无法改变问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法
    2023-07-06

    element中form组件prop嵌套属性问题怎么解决

    本篇内容介绍了“element中form组件prop嵌套属性问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Introductio
    2023-06-29

    vue中template报错问题怎么解决

    这篇文章主要讲解了“vue中template报错问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue中template报错问题怎么解决”吧!template报错写这个纯粹是为了纪
    2023-06-30

    Vue项目中怎么解决跨域问题

    本篇内容主要讲解“Vue项目中怎么解决跨域问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue项目中怎么解决跨域问题”吧!跨域跨域报错是前端开发中非常经典的一个错误,报错如下 Access
    2023-07-02

    vue中ref的使用问题怎么解决

    本文小编为大家详细介绍“vue中ref的使用问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue中ref的使用问题怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。vue的ref(this.$r
    2023-06-29

    Vue3中无法为el-tree-select设置反选问题怎么解决

    本文小编为大家详细介绍“Vue3中无法为el-tree-select设置反选问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue3中无法为el-tree-select设置反选问题怎么解决”文章能帮助大家解决疑惑,下面跟着小编的
    2023-07-06

    vue-cli5中yarn的报错问题怎么解决

    这篇文章主要讲解了“vue-cli5中yarn的报错问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue-cli5中yarn的报错问题怎么解决”吧!vue-cli抛出了错误如下:
    2023-06-30

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录