<template>
    <div>
        <el-row>
            <el-col :span="5">
                <div class="box">
                    <el-scrollbar>
                        <basic-container>
                            <avue-tree :option="treeOption" :data="bfeesdefineType" @node-click="nodeClick" />
                        </basic-container>
                    </el-scrollbar>
                </div>
            </el-col>
            <el-col :span="19">
                <basic-container>
                    <avue-crud :option="option"
                               :table-loading="loading"
                               :data="data"
                               :page.sync="page"
                               :permission="permissionList"
                               id="out-table"
                               :header-cell-class-name="headerClassName"
                               :before-open="beforeOpen"
                               v-model="form"
                               ref="crud"
                               @row-update="rowUpdate"
                               @row-save="rowSave"
                               @row-del="rowDel"
                               @search-change="searchChange"
                               @search-reset="searchReset"
                               @selection-change="selectionChange"
                               @current-change="currentChange"
                               @size-change="sizeChange"
                               @refresh-change="refreshChange"
                               @resetColumn="resetColumnTwo('crud', 'option', 'optionBack', 302)"
                               @saveColumn="saveColumnTwo('crud', 'option', 'optionBack', 302)"
                               @on-load="onLoad">
                        <template slot="menuLeft">
                            <el-button type="danger"
                                       size="small"
                                       icon="el-icon-delete"
                                       plain
                                       @click="handleDelete">删 除
                            </el-button>
                        </template>
                    </avue-crud>
                </basic-container>
            </el-col>
        </el-row>
    </div>
</template>

<script>
  import {bfeesList, bfeesDetail, bfeesSubmit, bfeesRemove} from "@/api/iosBasicData/bfees";
  import {mapGetters} from "vuex";
  import {bfeesdefineList} from "@/api/iosBasicData/bfeesdefine";
  import {getDeptLazyTree} from "@/api/basicData/customerInformation";
  import {CDParameter, customerParameter} from "@/enums/management-type";

  export default {
    data() {
      return {
          // 费用类别数据
          bfeesdefineType:[],
          treeOption: {
              nodeKey: "id",
              lazy: true,
              treeLoad: function(node, resolve) {
                  const parentId = node.level === 0 ? 0 : node.data.id;
              },
              addBtn: false,
              menu: false,
              size: "small",
              props: {
                  labelText: "标题",
                  label: "cnName",
                  value: "value",
                  children: "children"
              }
          },

        form: {},
        query: {},
        loading: true,
        page: {
          pageSize: 10,
          currentPage: 1,
          total: 0
        },
        selectionList: [],
        option:{},
        optionBack: {
          height:'auto',
          calcHeight: 30,
          tip: false,
          searchShow: true,
          searchMenuSpan: 24,
          border: true,
          index: true,
          viewBtn: true,
          selection: true,
          dialogClickModal: false,
          column: [
            {
              label: "费用编码",
              prop: "code",
                search: true,
              rules: [{
                required: true,
                message: "请输入费用编码",
                trigger: "blur"
              }]
            },
            {
              label: "中文名称",
              prop: "cnName",
                search: true,
              rules: [{
                required: true,
                message: "请输入中文名称",
                trigger: "blur"
              }]
            },
            {
              label: "英文名称",
              prop: "enName",
                search: true,
              rules: [{
                required: true,
                message: "请输入英文名称",
                trigger: "blur"
              }]
            },
            {
                label: "费用类别",
                prop: "feesTypeName",

                rules: [{
                      required: true,
                      message: "请选择费用类别",
                      trigger: "blur"
                }]
            },
            {
              label: "计量单位",
              prop: "unitNo",
              rules: [{
                required: true,
                message: "请输入计量单位",
                trigger: "blur"
              }]
            },
            {
              label: "币别",
              prop: "curNo",
              rules: [{
                required: true,
                message: "请输入币别",
                trigger: "blur"
              }]
            },
            {
              label: "收付",
              prop: "dc",
                type:'select',
                dicData:[{
                    label:'收',
                    value:'D'
                },{
                    label:'付',
                    value:'C'
                }],
              rules: [{
                required: true,
                message: "请输入收付",
                trigger: "blur"
              }]
            },
            {
              label: "财务核算要素 Id",
              prop: "accElementId",
                hide:true,
                display:false,
            },
            {
              label: "财务核算要素名称",
              prop: "accElementName",
              rules: [{
                required: true,
                message: "请输入财务核算要素名称",
                trigger: "blur"
              }]
            },
            {
              label: "科目 Id",
              prop: "accId",
                hide:true,
                display:false,
            },
            {
              label: "科目编号",
              prop: "accNo",
              rules: [{
                required: true,
                message: "请输入科目编号",
                trigger: "blur"
              }]
            },
            {
              label: "科目全称",
              prop: "accFullName",
              rules: [{
                required: true,
                message: "请输入科目全称",
                trigger: "blur"
              }]
            },
            {
              label: "版本",
              prop: "version",
                hide:true,
                display:false,
            },
            {
              label: "状态",
              prop: "status",
                type:'select',
                dicData:[{
                    label:'启用',
                    value:0
                },{
                    label:'停用',
                    value:1
                }],
              rules: [{
                required: true,
                message: "请输入状态",
                trigger: "blur"
              }]
            },
              {
                  label: "主键",
                  prop: "id",
                  hide:true,
                  display:false,
              },
              {
                  label: "创建人 Id",
                  prop: "createUser",
                  hide:true,
                  display:false,
              },
              {
                  label: "创建人",
                  prop: "createUserName",
                  display:false,
              },
              {
                  label: "创建部门 Id",
                  prop: "createDept",
                  hide:true,
                  display:false,
              },
              {
                  label: "创建部门",
                  prop: "createDeptName",
                  display:false,
              },
              {
                  label: "创建时间",
                  prop: "createTime",
                  display:false,
              },
              {
                  label: "修改人 Id",
                  prop: "updateUser",
                  hide:true,
                  display:false,
              },
              {
                  label: "修改人",
                  prop: "updateUserName",
                  display:false,
              },
              {
                  label: "修改时间",
                  prop: "updateTime",
                  width:160,
                  display:false,
              },
            {
              label: "是否已删除（0 否 1是）",
              prop: "isDeleted",
                hide:true,
                display:false,
            },
            {
              label: "备注",
              prop: "remarks",
                span:24,
                type: 'textarea',
                width: "180",
                slot: true,
                minRows: 3,
            },
          ]
        },
        data: []
      };
    },
    computed: {
      ...mapGetters(["permission"]),
      permissionList() {
        return {
          // addBtn: this.vaildData(this.permission.bfees_add, false),
          // viewBtn: this.vaildData(this.permission.bfees_view, false),
          // delBtn: this.vaildData(this.permission.bfees_delete, false),
          // editBtn: this.vaildData(this.permission.bfees_edit, false)
        };
      },
      ids() {
        let ids = [];
        this.selectionList.forEach(ele => {
          ids.push(ele.id);
        });
        return ids.join(",");
      }
    },
      async created() {
          this.option = await this.getColumnData(this.getColumnName(302), this.optionBack);
          this.bfeesdefineListfun()
      },
    methods: {
        // 获取费用类别数据
        bfeesdefineListfun(){
            bfeesdefineList(1,10).then(res=>{
                this.bfeesdefineType = res.data.data.records
                console.log(res,304)
            })
        },
        nodeClick(data) {
            console.log(data,331)
            // this.feesTypeId = data.id;
            // this.page.currentPage = 1;
            // this.onLoad(this.page);
        },

      rowSave(row, done, loading) {
        bfeesSubmit(row).then(() => {
          this.onLoad(this.page);
          this.$message({
            type: "success",
            message: "操作成功!"
          });
          done();
        }, error => {
          loading();
          window.console.log(error);
        });
      },
      rowUpdate(row, index, done, loading) {
        bfeesSubmit(row).then(() => {
          this.onLoad(this.page);
          this.$message({
            type: "success",
            message: "操作成功!"
          });
          done();
        }, error => {
          loading();
          console.log(error);
        });
      },
      rowDel(row) {
        this.$confirm("确定将选择数据删除?", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning"
        })
          .then(() => {
            return bfeesRemove(row.id);
          })
          .then(() => {
            this.onLoad(this.page);
            this.$message({
              type: "success",
              message: "操作成功!"
            });
          });
      },
      handleDelete() {
        if (this.selectionList.length === 0) {
          this.$message.warning("请选择至少一条数据");
          return;
        }
        this.$confirm("确定将选择数据删除?", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning"
        })
          .then(() => {
            return bfeesRemove(this.ids);
          })
          .then(() => {
            this.onLoad(this.page);
            this.$message({
              type: "success",
              message: "操作成功!"
            });
            this.$refs.crud.toggleSelection();
          });
      },
      beforeOpen(done, type) {
        if (["edit", "view"].includes(type)) {
          bfeesDetail(this.form.id).then(res => {
            this.form = res.data.data;
          });
        }
        done();
      },
      searchReset() {
        this.query = {};
        this.onLoad(this.page);
      },
      searchChange(params, done) {
        this.query = params;
        this.page.currentPage = 1;
        this.onLoad(this.page, params);
        done();
      },
      selectionChange(list) {
        this.selectionList = list;
      },
      selectionClear() {
        this.selectionList = [];
        this.$refs.crud.toggleSelection();
      },
      currentChange(currentPage){
        this.page.currentPage = currentPage;
      },
      sizeChange(pageSize){
        this.page.pageSize = pageSize;
      },
      refreshChange() {
        this.onLoad(this.page, this.query);
      },
      onLoad(page, params = {}) {
        this.loading = true;
        bfeesList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
          const data = res.data.data;
          this.page.total = data.total;
          this.data = data.records;
          this.loading = false;
          this.selectionClear();
        });
      },

        //自定义列保存
        async saveColumnTwo(ref, option, optionBack, code) {
            /**
             * 已定义全局方法，直接使用，saveColumnData保存列数据方法,参数传值(表格名称，当前表格的option数据)
             * 已定义全局方法，直接使用，getColumnName方法用来获取枚举值，参数根据自己定义的code值获取中文名
             * 一定要执行异步操作，要等接口成功返回，才能执行下一行代码
             */
            const inSave = await this.saveColumnData(this.getColumnName(code), this[option]);
            if (inSave) {
                this.$message.success("保存成功");
                //关闭窗口
                this.$refs[ref].$refs.dialogColumn.columnBox = false;
            }
        },
        //自定义列重置
        async resetColumnTwo(ref, option, optionBack, code) {
            this[option] = this[optionBack];
            const inSave = await this.delColumnData(this.getColumnName(code), this[optionBack]);
            if (inSave) {
                this.$message.success("重置成功");
                this.$refs[ref].$refs.dialogColumn.columnBox = false;
            }
        },
        // 更改表格颜色
        headerClassName(tab){
            //颜色间隔
            let back = ""
            if (tab.columnIndex >= 0 && tab.column.level === 1) {
                if (tab.columnIndex % 2 === 0) {
                    back = "back-one"
                } else if (tab.columnIndex % 2 === 1) {
                    back = "back-two"
                }
            }
            return back;
        },

    }
  };
</script>

<style scoped>
::v-deep#out-table .back-one {
    background: #ecf5ff !important;
}
::v-deep#out-table .back-two {
    background: #ecf5ff !important;
}
</style>
