| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617 | <template><div>  <basic-container>    <avue-crud        ref="crud"        :data="dataList"        :option="option"        v-model="form"        :table-loading="loading"        :page.sync="page"        @on-load="onLoad"        @row-del="rowDel"        @search-change="searchChange"        @row-update="rowUpdate"        :before-open="beforeOpen"        @search-criteria-switch="searchCriteriaSwitch"        @row-save="rowSave">      <template slot="menuLeft">        <el-button type="primary"                   size="small"                   icon="el-icon-upload2"                   @click="handleImport">导入        </el-button>      </template>      <template slot="urlForm" slot-scope="{ row }">        <el-input            placeholder="文件地址"            size="small"            v-if="row.$cellEdit"            v-model="row.url"            class="input-with-select">          <el-button size="small" type="primary" slot="prepend" @click="download(row)">查看</el-button>          <el-upload              class="upload-demo"              :show-file-list="false"              slot="append"              :action="action"              :headers="headers"              :on-success="(response)=>{onSuccessTwo(response,row)}"              :multiple="false">            <el-button size="small" type="primary">上传</el-button>          </el-upload>        </el-input>        <span v-else>{{ row.url }}</span>      </template>      <template slot-scope="scope" slot="fleetIdForm">        <crop-select corpType="CD" v-model="form.fleetId"/>      </template>      <template slot-scope="scope" slot="fleetIdSearch">        <crop-select corpType="CD" v-model="scope.row.fleetId"/>      </template>      <template slot-scope="scope" slot="fleetId">        <span>{{scope.row.fleetName}}</span>      </template>      <template slot-scope="{type,size,row}" slot="menu">        <el-button icon="el-icon-check" :size="size" :type="type" @click="creatingUsers(row)">创建用户</el-button>      </template>    </avue-crud>    <el-dialog        title="创建用户"        :visible.sync="dialogVisible"        append-to-body        width="60%">      <avue-form ref="formData" v-model="formData" :option="optionData">      </avue-form>      <span slot="footer" class="dialog-footer">    <el-button @click="dialogVisible = false">取 消</el-button>    <el-button type="primary" @click="confirmSynchronization">确 定</el-button>  </span>    </el-dialog>    <el-dialog title="导入"               append-to-body               :visible.sync="excelBox"               width="555px">      <avue-form :option="excelOption" v-model="excelForm" :upload-after="uploadAfter">        <template slot="excelTemplate">          <el-button type="primary" @click="handleTemplate">            点击下载<i class="el-icon-download el-icon--right"></i>          </el-button>        </template>      </avue-form>      <p style="text-align: center;color: #DC0505">        温馨提示 第一次导入时请先下载模板      </p>    </el-dialog>  </basic-container></div></template><script>import {getToken} from "@/util/auth";import {  saveDelegationList,  removeDelegationList,  selectInvoiceList,  detailDelegationList, removeFile,driverUser} from "@/api/landTransportation/driver";import website from "@/config/website";import {getRoleTree} from "@/api/system/role";import {getDeptTree} from "@/api/system/dept";import {getPostList} from "@/api/system/post";export default {  name: "index",  data(){    return{      form:{},      formRow:{},      dataList:[],      formData:{},      optionData:{        span:8,        menuBtn:false,        column:[{          label: "所属角色",          prop: "roleId",          multiple: true,          type: "tree",          dicData: [],          props: {            label: "title"          },          checkStrictly: true,          slot: true,          rules: [{            required: true,            message: "请选择所属角色",            trigger: "click"          }]        },{          label: "所属部门",          prop: "deptId",          type: "tree",          multiple: true,          dicData: [],          props: {            label: "title"          },          checkStrictly: true,          slot: true,          rules: [{            required: true,            message: "请选择所属部门",            trigger: "click"          }]        },          {            label: "所属岗位",            prop: "postId",            type: "tree",            multiple: true,            dicData: [],            props: {              label: "postName",              value: "id"            },            rules: [{              required: true,              message: "请选择所属岗位",              trigger: "click"            }],          }]      },      excelOption: {        submitBtn: false,        emptyBtn: false,        column: [          // {          //   label: "数据覆盖",          //   prop: "isCovered",          //   type: "switch",          //   align: "center",          //   width: 80,          //   dicData: [          //     {          //       label: "否",          //       value: 0          //     },          //     {          //       label: "是",          //       value: 1          //     }          //   ],          //   value: 0,          //   slot: true,          //   rules: [          //     {          //       required: true,          //       message: "请选择是否覆盖",          //       trigger: "blur"          //     }          //   ]          // },          {            label: '模板下载',            prop: 'excelTemplate',            formslot: true,            span: 24,          },{            label: '模板上传',            prop: 'excelFile',            type: 'upload',            drag: true,            loadText: '模板上传中,请稍等',            span: 24,            propsHttp: {              res: 'data'            },            tip: '请上传 .xls,.xlsx 标准格式文件',            action: "/api/blade-client/land-driver/import-data"          }        ]      },      excelForm:{},      dialogVisible:false,      loading:false,      page: {        pageSize: 10,        currentPage: 1,        total: 0,        pageSizes: [10,50,100,200,300]      },      excelBox:false,      action: "/api/blade-resource/oss/endpoint/put-file",      headers: { "Blade-Auth": "Bearer " + getToken() },      option:{        align:'center',        dialogWidth:'85%',        index: true,        searchIcon: true,        searchIndex: 2,        searchLabelWidth:100,        searchSpan:8,        column:[{          label: '司机姓名',          prop: 'name',          index: 1,          width: 140,          span: 8,          cell: true,          overHidden: true,          search:true,          type: 'select',          filterable:true,          dicUrl: "/api/blade-client/land-driver/driver-list?vehicleId={{key}}",          props: {            label: "name",            value: "name"          },        },{          label: '身份证号',          prop: 'idCard',          index: 1,          width: 140,          span: 8,          cell: true,          overHidden: true,          search:true,        },{          label: '准驾车型',          prop: 'permitModel',          index: 1,          width: 140,          span: 8,          cell: true,          overHidden: true,          search:true,        },{          label: '电话',          prop: 'tel',          index: 1,          width: 140,          span: 8,          cell: true,          overHidden: true,          search:true,          rules: [{            required: true,            message: " ",            trigger: "blur"          }]        },{          label: '所属车队',          prop: 'fleetId',          index: 1,          width: 140,          span: 8,          cell: true,          overHidden: true,          search:true,        },{          label: '性别',          prop: 'sex',          index: 1,          width: 140,          span: 8,          cell: true,          overHidden: true,          search:true,          type: 'select',          dicUrl: "/api/blade-system/dict/dictionary?code=sex",          props: {            label: "dictValue",            value: "dictKey"          },          dataType: "number",        },{          label: '驾驶证有效期',          prop: 'driveExpire',          type: "date",          searchRange: true,          search: true,          span: 8,          searchSpan: 8,          searchDefaultTime: ['00:00:00', '23:59:59'],          format: "yyyy-MM-dd",          valueFormat: "yyyy-MM-dd HH:mm:ss",          index: 1,          width: 140,        },{          label: '资格证证件号',          prop: 'qualifiedNo',          index: 1,          width: 140,          span: 8,          cell: true,          overHidden: true,          search:true,        },{          label: '资格证有效期',          prop: 'qualifiedExpire',          type: "date",          searchRange: true,          search: true,          span: 8,          searchSpan: 8,          searchDefaultTime: ['00:00:00', '23:59:59'],          format: "yyyy-MM-dd",          valueFormat: "yyyy-MM-dd HH:mm:ss",          index: 1,          width: 140        },{          label: '押运证证件号',          prop: 'escortNo',          index: 1,          width: 140,          span: 8,          cell: true,          overHidden: true,          search:true,        },{          label: '押运证有效期',          prop: 'escortExpire',          type: "date",          width: 140,          searchRange: true,          search: true,          span: 8,          searchSpan: 8,          searchDefaultTime: ['00:00:00', '23:59:59'],          format: "yyyy-MM-dd",          valueFormat: "yyyy-MM-dd HH:mm:ss",        }, {          label: '信用等级',          width: 150,          span: 8,          prop: 'salesman',          search: true,          overHidden: true,          type: "select",          dicUrl: "/api/blade-system/dict-biz/dictionary?code=credit_rating",          props: {            label: "dictValue",            value: "dictKey"          },        },{          label: '附件',          prop: 'fileList',          type: 'dynamic',          span:24,          hide:true,          showColumn:false,          children: {            align: 'center',            headerAlign: 'center',            rowAdd:(done)=>{              // this.$message.success('新增回调');              done()            },            rowDel:(row,done)=>{              if (row.id) {                removeFile(row.id).then(res=>{                  done();                })              }else {                done();              }            },            column: [{              width: 360,              label: '文件地址',              prop: "url"            }, {              width: 200,              label: '文件名称',              prop: "fileName",              formslot: true            },{              width: 200,              label: '文件属性',              type: "select",              dicUrl: "/api/blade-system/dict-biz/dictionary?code=file_type",              props: {                label: "dictValue",                value: "dictValue"              }            }, {              label: '备注',              prop: "remarks",            }]          }        }]      }    }  },  created() {    let i = 0;    this.option.column.forEach(item => {      if (item.search) i++    })    this.initData(JSON.parse(localStorage.getItem("saber-userInfo")).content.tenant_id)    if (i % 3 !== 0){      const num = 3 - Number(i % 3)      this.option.searchMenuSpan = num * 8;      this.option.searchMenuPosition = "right";    }  },  methods:{    handleImport() {      this.excelBox = true;    },    uploadAfter(res, done, loading, column) {      this.excelBox = false;      this.refreshChange();      done();    },    refreshChange() {      this.onLoad(this.page, {});    },    handleTemplate() {      window.open(`/api/blade-client/land-driver/import-template?${this.website.tokenHeader}=${getToken()}`);    },    //确认创建用户    confirmSynchronization(){      this.$refs['formData'].validate((valid, done) => {        done()        if (valid) {          let data = JSON.parse(JSON.stringify(this.formData))          data.deptId = data.deptId.join(",");          data.roleId = data.roleId.join(",");          data.postId = data.postId.join(",");          driverUser({            ...data,            id:this.formRow.id          }).then(res=>{            this.dialogVisible = false            this.$message.success('创建用户成功,默认帐号:司机名称。默认密码:123456');          })        } else {          return false;        }      });    },    creatingUsers(row){      console.log(row)      if (row.tel){        this.dialogVisible = true        this.formData = {}        this.formRow = row      }else {        this.$message.error('请输入手机号');      }    },    initData(tenantId) {      getRoleTree(tenantId).then(res => {        const column = this.findObject(this.optionData.column, "roleId");        column.dicData = res.data.data;      });      getDeptTree(tenantId).then(res => {        const column = this.findObject(this.optionData.column, "deptId");        column.dicData = res.data.data;      });      getPostList(tenantId).then(res => {        const column = this.findObject(this.optionData.column, "postId");        column.dicData = res.data.data;      });    },    // 获得高度    searchCriteriaSwitch(type){      if (type){        this.option.height = this.option.height - 138      }else {        this.option.height = this.option.height + 138      }      this.$refs.crud.getTableHeight()    },    //附件上传成功    onSuccessTwo(response,row){      row.url = response.data.link      row.fileName = response.data.originalName    },    //下载附件    download(row){      if (row.url){        window.open(row.url)      }else {        this.$message.warning('无附件,请上传附件后再查看');      }    },    //新增    rowSave(row,done,loading){      console.log(row)      saveDelegationList(row).then(res=>{        this.$message.success('保存成功');        this.onLoad(this.page)        done()      }, error => {        window.console.log(error);        loading();      })    },    //点击行编辑时查看    beforeOpen(done,type){      if (this.form.id){        detailDelegationList(this.form.id).then(res=>{          this.form = res.data.data          done()        })      }else {        done()      }    },    //修改    rowUpdate(row,index,done,loading){      saveDelegationList(row).then(res=>{        this.$message.success('保存成功');        this.onLoad(this.page)        loading();        // done()      }, error => {        window.console.log(error);        loading();      })    },    //检索    onLoad(page, params) {      let queryParams = {        size: page.pageSize,        current: page.currentPage,        ...this.query      }      this.loading = true;      selectInvoiceList(queryParams).then(res => {        this.dataList = res.data.data.records        this.page.total = res.data.data.total        this.option.height = window.innerHeight - 240;      }).finally(() => {        this.loading = false;      })    },    //搜索    searchChange(params,done) {      let data = params      if (data.driveExpire){        data.beginDriveExpire = data.driveExpire[0]        data.endDriveExpire = data.driveExpire[1]      }      if (data.qualifiedExpire){        data.beginQualifiedExpire = data.qualifiedExpire[0]        data.endQualifiedExpire = data.qualifiedExpire[1]      }      if (data.escortExpire){        data.beginEscortExpire = data.escortExpire[0]        data.endEscortExpire = data.escortExpire[1]      }      delete data.driveExpire      delete data.qualifiedExpire      delete data.escortExpire      this.query = data      this.onLoad(this.page,data)      done();    },    //列表删除    rowDel(row){      this.$confirm('此操作将永久删除该单据, 是否继续?', '提示', {        confirmButtonText: '确定',        cancelButtonText: '取消',        type: 'warning'      }).then(() => {        removeDelegationList({ids:row.id}).then(res=>{          this.$message.success('删除成功');          this.onLoad(this.page)        })      }).catch(() => {        this.$message({          type: 'info',          message: '已取消删除'        });      });    },  }}</script><style scoped></style>
 |