text: //1、此文件中的代码都是对基础业务进行扩展，也只能在此处编写代码，其他地方编写的代码会被代码生成器生成的代码覆盖
  //2、此文件中的方法会与serviceFilter.js进行合并，终终执行的就是此文件中的方法
  //3、components为扩展组件，可自定义页面的头部、body及尾部的额外显示的内容，分别对应的组件为:
  //gridHeader、gridBody、gridFooter、modelHeader、modelBody、modelFooter共6个组件位置，如果不需要扩展组件，请忽略此处
  //4、text为界面显示额外描述信息
  //5、buttons->view/box/detail分别为查询界面、弹出框、弹出框明细表额外扩展的按钮
  //6、methods为整个页面所有方法的业务代码扩展，如果需要在界面上的操作前、后编写业务，请覆盖此方法
  //7、methods方法中可获取任意vue对象、方法、属性,可查看ViewGridConfig路径下的js文件及ViewGrid.vue的data属性
  //如手动刷新表数据:this.search();
  //获取表的列配置信息:this.columns  明细表表的配置信息this.detail.columns
  //8、获取子组件gridHeader、gridBody、gridFooter、modelHeader、modelBody、modelFooter则使用
  //this.$refs.gridHeader获取gridHeader为自己扩展的对象
  //9、在子组件gridHeader、gridBody、gridFooter、modelHeader、modelBody、modelFooter的方法中调用并获得父组件
  // this.$emit("parentCall", $vue => {}) //$vue为父组件对象，具体使用参考order->GridHeaderExtend.vue文件
  
  //10、子父件传参除8、9方式，另可使用已封装的vuex,使用方式:this.$store.getters.data().xxx = this;使用实例：App_News.js
  
  //此处的下面的属性与方法都是对基础业务代码的扩展，如果不需要扩展则忽略对应的方法也不要写在下面
  //serviceFilter.js
  //所的文件都最终会合并到ViewGrid.vue文件中
  
  
  let extension = {
    components: {//动态扩充组件或组件路径
      //表单header、content、footer对应位置扩充的组件
      gridHeader: () => import("./SellOrderComponents/GridHeaderExtend.vue"),//{ template: "<div>扩展组xx件</div>" },
      gridBody: {
        template: `<div>
          <Alert type="success" show-icon> <p style="color:red;">一对一全部由代码生成，不需要写任何代码,点击新建或编辑查看明细表</p><p>如需要扩展，根据需要实现gridHeader、gridBody、gridFooter、modelHeader、modelBody、modelFooter任意位置</p></Alert></div>`},//() => import("./SellOrderComponents/GridBodyExtend.vue"),
      gridFooter: () => import("./SellOrderComponents/GridFooterExtend.vue"),
      //弹出框(修改、编辑、查看)header、content、footer对应位置扩充的组件
      modelHeader: "",
      modelBody: {
        template: '<Alert style="background: white;" type="success" show-icon>\
           你可以在此modelBody扩展处添加业务相关内容 <template slot="desc">\
            <Steps :current="2" size="small">\
          <Step title="已完成"></Step>\
          <Step title="进行中"></Step>\
          <Step title="待进行"></Step>\
          <Step title="待进行"></Step>\
          </Steps></template>\
         </Alert>' },
      modelFooter: "", //() => import("./SellOrderComponents/ModelFooter.vue"),
    },
    text: "示例覆盖全部可扩展方法,前台扩展文件SellOrder.js，后台Partial->SellOrdeService.cs",
    buttons: { //根据需要自行实现扩展按钮
      //注：没有编辑或新建权限的情况下，是不会显示此处添加的扩展按钮，如果仍需要显示此处的按钮，可以把按钮在methods的onInited方法中添加,如：this.boxButtons.push(...)
      view: [//ViewGrid查询界面按钮
        {
          name: "点我",
          icon: 'md-create',
          value: 'Edit',
          class: '',
          type: 'error',
          index: 1,//显示的位置
          onClick: function () { //扩展按钮执行事件
            //this可以获取所有属性，包括this.$refs.gridHeader/gridBody等获取扩展组件对象
            // this.$message("测试扩展按钮");
            this.$refs.gridHeader.model = true;
          }
        }, {
          name: "调用后台",
          icon: 'md-create',
          value: 'Edit',
          class: '',
          type: 'error',
          index: 1,//显示的位置
          onClick: function () { //扩展按钮执行事件
            this.getServiceDate();
          }
        }],
      box: //新建、编辑弹出框按钮
        [//ViewGrid查询界面按钮
          {
            name: "点我1",
            icon: 'md-create',
            value: 'Edit',
            class: '',
            type: 'success',
            index: 1,//显示的位置
            onClick: function () {
              this.$message.error("扩展的明细Box按钮,可设置index值指定显示位置,可使用this.$refs拿到包括自定义扩展的所有组件");
            }
          }],
      detail: //新建、编辑弹出框明细表table表按钮
        [//ViewGrid查询界面按钮
          {
            name: "点我2",
            icon: 'md-create',
            value: 'Edit',
            class: '',
            type: 'success',
            index: 1,//显示的位置
            onClick: function () {
              this.$message.error("扩展的明细table按钮,可设置index值指定显示位置");
            }
          }]
    },//扩展的按钮
    methods: {
      //扩展方法使用示例,根据需要实行下面的方法
      getServiceDate () {
        this.http.post("/api/SellOrder/getServiceDate", {}, '正在调用后台数据').then(date => {
          this.$message.error("从后台获取的服务器时间是：" + date);
        })
      },
      mounted () {
  
        // this.$Notice.success({ title: '执行mounted方法' });
      },
      //方式1,通过select选择触发显示与隐藏
      onInit () {
        //获取订单类型select配置，当前订单类型select改变值时，动态设置Remark,SellNo两个字段是否显示 
        var orderTypeOption = this.getFormOption("OrderType");
        orderTypeOption.onChange = (val) => {
  
          //当订单类型select改变值时，如果选中的是发货(对应字典编号为2)，emark,SellNo隐藏，否则显示出来
          var remarkOption = this.getFormOption("Remark");
          this.$set(remarkOption, "hidden", val == "2")
  
          var sellNoOption = this.getFormOption("SellNo");
          this.$set(sellNoOption, "hidden", val == "2")
        }
  
        //点击单元格编辑与结束编辑(默认是点击单元格编辑，鼠标离开结束编辑)
        this.detailOptions.clickEdit = true;
        //设置主表合计
        this.summary = true;
        //设置明细表合计
        this.detailOptions.summary = true;
        //表格设置为单选
        // this.single=true;
        // this.detailOptions.single=true;
        //设置编辑表单数量字段的最小与最大值
        this.editFormOptions.forEach(x => {
          x.forEach(item => {
            //设置输入的数量的最小值与最大值(默认是1)
            if (item.field == "Qty") {
              item.min = 10;
              item.max = 200;
            }
          });
        })
  
        //动态修改table并给列添加事件
        this.columns.forEach(x => {
          if (x.field == "Qty") {
            x.formatter = (row) => {
              return '<a>' + row.Qty + "(弹出框)" + '</a>'
            }
            x.click = (row, column, event) => {
              this.$refs.gridHeader.model = true;
            }
          }
        })
  
        //动态设置弹出框table的高度
        this.detailOptions.height = 160;
        //动态设置查询界面table高度
        this.tableMaxHeight = 300;
        this.$Notice.success({ title: 'create方法执行时,你可以此处编写业务逻辑' });
      },
      onInited () {
        //设置主表求字段，后台需要实现SummaryExpress方法
        this.columns.forEach(x => {
          if (x.field == 'Qty') {
            x.summary = true;
          }
        })
        //设置明细表求字和段，后台需要实现GetDetailSummary方法
        this.detailOptions.columns.forEach(x => {
          if (x.field == 'Weight' || x.field == 'Qty') {
            x.summary = true;
          }
        })
        //   this.$Notice.success({ title: 'create方法执行后', desc: '你可以SellOrder.js中编写业务逻辑,其他方法同样适用' });
      },
      searchBefore (param) { //查询ViewGird表数据前,param查询参数
        //你可以指定param查询的参数，处如果返回false，则不会执行查询
        // this.$Notice.success({ title: this.table.cnName + ',查询前' });
        // console.log("扩展的"this.detailOptions.cnName + '触发loadDetailTableBefore');
        return true;
      },
      searchAfter (result) { //查询ViewGird表数据后param查询参数,result回返查询的结果
        this.$Notice.success({ title: this.table.cnName + ',查询结果', desc: '返回的对象：' + JSON.stringify(result) });
        return true;
      },
      searchDetailBefore (param) {//查询从表表数据前,param查询参数
        //  this.$Notice.success({ title: this.detailOptions.cnName + '查询前' });
        return true;
      },
      searchDetailAfter (data) {//查询从表后param查询参数,result回返查询的结果
        this.$Notice.success({ title: this.detailOptions.cnName + ',查询结果', desc: '返回的对象：' + JSON.stringify(data) });
        return true;
      },
      delBefore (ids, rows) { //查询界面的表删除前 ids为删除的id数组,rows删除的行
        let auditStatus = rows.some(x => { return x.AuditStatus > 0 });
        if (auditStatus) {
          this.$message.error('只能删除未审核的数据')
          return false;
        }
        this.$Notice.success({ title: '删除前，选择的Id:' + ids.join(',') });
        return true;
      },
      delAfter (result) {//查询界面的表删除后
        return true;
      },
      delDetailRow (rows) { //弹出框删除明细表的行数据(只是对table操作，并没有操作后台)
        console.log(rows)
        return true;
      },
      addBefore (formData) { //新建保存前formData为对象，包括明细表
        //formData格式：
        // {
        //     mainData: { 主表字段1: 'x1', 主表字段2: 'x2' },
        //     detailData: [{ 明细表字段1: d1 }],
        //     delKeys: null //删除明细表行数据的id
        // }
  
        //formData.mainData.xxx="xxxx";//还可以继续手动添加值
  
        //如果需要同时提交其他数据到后台，请设置formData.extra=xxxx
        //后台在表xxxxService.cs中重写Add方法即可从saveDataModel参数中拿到extra提交的对象
        this.$Notice.success({ title: this.detailOptions.cnName + '新建前：', desc: '提前的数据：' + JSON.stringify(formData) });
        return true;
      },
      async addBeforeAsync (formData) {
        //2020.12.06增加新建前异步方法同步处理
        //功能同上，区别在于此处可以做一些异步请求处理,全：
        // var _result = await this.http.post("/api/SellOrder/getPageData", {}, true).then(result => {
        //   console.log("1、异步请求前")
        //   return result;
        // })
        // console.log("2、异步请求，同步处理结果:" + JSON.stringify(_result))
        return true;
      },
      addAfter (result) {//新建保存后result返回的状态及表单对象
        this.$Notice.success({ title: this.detailOptions.cnName + '新建完成后：', desc: '返回的数据' + JSON.stringify(result) });
        return true;
      },
      updateBefore (formData) { //编辑保存前formData为对象，包括明细表、删除行的Id
        //formData格式：(自己调试出输看)
        // {
        //     mainData: { 主表字段1: 'x1', 主表字段2: 'x2' },
        //     detailData: [{ 明细表字段1: d1 }],
        //     delKeys: null //删除明细表行数据的id
        // }
  
        //formData.mainData.xxx="xxxx";//还可以继续手动添加值
  
        //如果需要同时提交其他数据到后台，请设置formData.extra=xxxx
        //后台在表xxxxService.cs中重写Update方法即可从saveDataModel参数中拿到extra提交的对象
  
        this.$Notice.success({ title: this.detailOptions.cnName + '编辑前：', desc: '提前的数据：' + JSON.stringify(formData) });
        //获取扩展的modelFooter属性text
        console.log(this.$refs.modelFooter.text)
        return true;
      },
      async updateBeforeAsync (formData) {
        //2020.12.06增加修改前异步方法同步处理
        //功能同上，区别在于此处可以做一些异步请求处理,全：
        var _result = await this.http.post("/api/SellOrder/getPageData", {}, true).then(result => {
          console.log("1、异步请求前")
          return result;
        })
        console.log("2、异步请求，同步处理结果:" + JSON.stringify(_result))
        return true;
      },
      updateAfter (result) {//编辑保存后result返回的状态及表单对象
        this.$Notice.success({ title: this.detailOptions.cnName + '编辑完成后：', desc: '返回的数据' + JSON.stringify(result) });
        return true;
      },
      auditBefore (ids, rows) {//审核前
        if (rows.length > 2) {//每次最多只能审核2条数据
          this.$message.error('最多只能选择两条数据');
          return false;
        }
        return true;
      },
      auditAfter (result, rows) {// 审核后
        if (result.status) {
          result.message = "审核成功。。。。。" + result.message;
        }
        return true;
      },
      resetAddFormBefore () { //重置新建表单前的内容
        return true;
      },
      resetAddFormAfter () { //重置新建表单后的内容
        //如果某些字段不需要重置，则可以重新赋值
        this.editFormFileds.Remark = '新建重置默认值66666';
        //给明细表添加默认一行
        this.$refs.detail.rowData.push({ Remark: "新建666666" });
        return true;
      },
      resetUpdateFormBefore () { //重置编辑表单前的内容
        //this.editFormFileds当前值
        console.log(this.editFormFileds)
        //当前明细表的行
        console.log(this.$refs.detail.rowData)
        return true;
      },
      resetUpdateFormAfter () { //重置编辑表单后的内容
        //如果某些字段不需要重置，则可以重新赋值
        this.editFormFileds.Remark = '编辑重置默认值66666';
        //给明细表添加默认一行
        this.$refs.detail.rowData.push({ Remark: "编辑666666" });
        return true;
      },
      importAfter (data) { //导入excel后刷新table表格数据
        this.search(); //刷新table
      },
      modelOpenBefore (row) { //点击编辑/新建按钮弹出框前，可以在此处写逻辑，如，从后台获取数据
  
      },
      getFormOption (field) {
        let option;
        this.editFormOptions.forEach(x => {
          x.forEach(item => {
            if (item.field == field) {
              option = item;
            }
          })
        })
        return option;
      },
  
      //方式2,通过打开弹出框时触发显示与隐藏
      modelOpenAfter (row) {  //编辑或新建时，根据不同的情况控制字段是否显示 
        //   this.editFormOptions.forEach(x => {
        //     x.forEach(item => {
        //       if (item.field == "Remark" || item.field == "SellNo") {
        //         //如果不是新建，则隐藏Remark,SellNo两个字段是否显示 
        //          //也可以根据row当前编辑行的值来处理
        //         this.$set(item, "hidden", this.currentAction != "Add")
        //       }
        //     })
        //   })
      },
      rowClick ({ row, column, event }) { //查询界面table点击行选中当前行
        this.$refs.table.$refs.table.toggleRowSelection(row);
      },
      // detailRowClick ({ row, column, event }) {
      //   //编辑弹出框从表table点击行选中当前行，没有从表的不用管
      //   this.$refs.detail.$refs.table.toggleRowSelection(row);
      // }
    }
  };
  export default extension;
  