<template>
  <div class="app-container">
    <el-card>
      <div>
        <el-button type="primary" icon="el-icon-plus" @click="handleCreate">
          新增供应商
        </el-button>
        <el-input
          v-model="listQuery.search"
          placeholder="供应商名称"
          style="width: 300px"
          class="filter-item"
          @keyup.enter.native="handleFilter"
        />
        <el-button
          class="filter-item"
          type="primary"
          icon="el-icon-search"
          @click="handleFilter"
        >
          搜索
        </el-button>
        <el-button
          class="filter-item"
          type="primary"
          icon="el-icon-refresh-left"
          @click="resetFilter"
        >
          重置
        </el-button>
      </div>
    </el-card>
    <el-card style="margin-top: 2px">
      <el-table
        v-loading="listLoading"
        :data="vendorList.results"
        border
        fit
        stripe
        highlight-current-row
        max-height="700"
        height="100"
        v-el-height-adaptive-table="{bottomOffset: 50}"
      >
        <el-table-column type="index" width="50"/>
        <el-table-column label="供应商名">
          <template slot-scope="scope">{{ scope.row.name }}</template>
        </el-table-column>

        <el-table-column label="联系人">
          <template slot-scope="scope">{{ scope.row.contact }}</template>
        </el-table-column>
        <el-table-column label="联系电话">
          <template slot-scope="scope">{{ scope.row.contact_phone }}</template>
        </el-table-column>
        <el-table-column label="地址" min-width="120" show-overflow-tooltip>
          <template slot-scope="scope">{{ scope.row.address }}</template>
        </el-table-column>
        <el-table-column label="供应物料">
          <template slot-scope="scope">{{ scope.row.material }}</template>
        </el-table-column>
        <el-table-column label="备注">
          <template slot-scope="scope">{{ scope.row.description }}</template>
        </el-table-column>
        <el-table-column label="创建时间" width="160">
          <template slot-scope="scope">{{ scope.row.create_time }}</template>
        </el-table-column>
        <el-table-column
          align="center"
          label="操作"
          width="220px"
        >
          <template slot-scope="scope">
            <el-link
              v-if="checkPermission(['vendor_update'])"
              type="primary"
              @click="handleEdit(scope)"
            >
              编辑
            </el-link>
            <el-link
              v-if="checkPermission(['vendor_delete'])"
              type="danger"
              @click="handleDelete(scope)"
            >
              删除
            </el-link>
          </template>
        </el-table-column>
      </el-table>
      <pagination
        v-show="vendorList.count > 0"
        :total="vendorList.count"
        :page.sync="listQuery.page"
        :limit.sync="listQuery.page_size"
        @pagination="getList"
      />
    </el-card>
    <el-dialog
      :visible.sync="dialogVisible"
      :title="dialogType === 'edit' ? '编辑设备' : '新增设备'"
    >
      <el-form
        ref="Form"
        :model="vendor"
        label-width="120px"
        label-position="right"
        :rules="rule1"
      >
        <el-form-item label="供应商名称" prop="name">
          <el-input v-model="vendor.name" placeholder="供应商名称"/>
        </el-form-item>
        <el-form-item label="联系人" prop="contact">
          <el-input v-model="vendor.contact" placeholder="联系人"/>
        </el-form-item>
        <el-form-item label="联系电话" prop="contact_phone">
          <el-input v-model="vendor.contact_phone" placeholder="联系电话"/>
        </el-form-item>
        <el-form-item label="地址" prop="address">
          <el-input v-model="vendor.address" placeholder="地址"/>
        </el-form-item>
        <el-form-item label="供应物料" prop="material">
          <el-input v-model="vendor.material" placeholder="供应物料"/>
        </el-form-item>
        <el-form-item label="备注" prop="description">
          <el-input
            type="textarea"
            :rows="4"
            v-model="vendor.description"
            placeholder="备注"
          />
        </el-form-item>
      </el-form>
      <div style="text-align: right">
        <el-button type="danger" @click="dialogVisible = false">取消</el-button>
        <el-button type="primary" @click="confirm('Form')">确认</el-button>
      </div>
    </el-dialog>
  </div>
</template>
<script>
  import {getpVendorList, createVendor, updateVendor, deleteVendor} from "@/api/vendor";
  import {getUserList} from "@/api/user";
  import checkPermission from "@/utils/permission";

  import {genTree} from "@/utils";
  import Pagination from "@/components/Pagination"; // secondary package based on el-pagination
  const defaultvendor = {
    name: "",
    number: "",
  };
  export default {
    components: {Pagination},
    data() {
      return {
        vendor: defaultvendor,
        vendorList: {
          count: 0,
        },
        options: [{
          value: '0',
          label: '运转正常'
        }, {
          value: '1',
          label: '停用'
        }, {
          value: '2',
          label: '报废'
        }],
        listQuery: {
          page: 1,
          page_size: 20,
        },
        keeperOptions: [],
        listLoading: true,
        dialogVisible: false,
        dialogType: "new",
        rule1: {
          name: [{required: true, message: "请输入", trigger: "blur"}],
          number: [{required: true, message: "请输入", trigger: "blur"}],
          model: [{required: true, message: "请输入", trigger: "blur"}],
          state: [{required: true, message: "请选择", trigger: "blur"}],
        },
      };
    },
    computed: {},
    watch: {},
    created() {
      this.getList();
    },
    methods: {
      checkPermission,
      //供应商列表
      getList() {
        this.listLoading = true;
        getpVendorList(this.listQuery).then((response) => {
          if (response.data) {
            this.vendorList = response.data;
          }
          this.listLoading = false;
        });
      },

      handleFilter() {
        this.listQuery.page = 1;
        this.getList();
      },
      resetFilter() {
        this.listQuery = {
          page: 1,
          page_size: 20,
        }
        this.getList();
      },
      handleCreate() {
        this.vendor = Object.assign({}, defaultvendor);
        this.dialogType = "new";
        this.dialogVisible = true;
        this.$nextTick(() => {
          this.$refs["Form"].clearValidate();
        });
      },

      handleEdit(scope) {
        this.vendor = Object.assign({}, scope.row); // copy obj
        this.dialogType = "edit";
        this.dialogVisible = true;
        this.$nextTick(() => {
          this.$refs["Form"].clearValidate();
        });
      },
      handleDelete(scope) {
        this.$confirm("确认删除?", "警告", {
          confirmButtonText: "确认",
          cancelButtonText: "取消",
          type: "error",
        })
          .then(async () => {
            await deleteVendor(scope.row.id);
            this.getList();
            this.$message.success("成功");
          })
          .catch((err) => {
            console.error(err);
          });
      },

      async confirm(form) {
        this.$refs[form].validate((valid) => {
          if (valid) {
            const isEdit = this.dialogType === "edit";
            if (isEdit) {
              updateVendor(this.vendor.id, this.vendor).then((res) => {
                if (res.code >= 200) {
                  this.getList();
                  this.dialogVisible = false;
                  this.$message.success("成功");
                }
              });
            } else {
              createVendor(this.vendor).then((res) => {
                if (res.code >= 200) {
                  this.getList();
                  this.dialogVisible = false;
                  this.$message.success("成功");
                }
              });
            }
          } else {
            return false;
          }
        });
      },
    },
  };
</script>
