| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700 | <!-- 船名 --><template>  <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', 293)"               @saveColumn="saveColumnTwo('crud', 'option', 'optionBack', 293)"               @on-load="onLoad">      <!-- <template slot-scope="scope" slot="status">        <el-checkbox v-model="scope.row.status" :true-label="0" :false-label="1" @change="putStatus(scope.row)">启用</el-checkbox>      </template> -->      <!-- <template slot-scope="scope" slot="extendedDataArr">            <span style="color: #1e9fff" @click="extendedDataview(scope.row)">                {{scope.row.extendedDataArr.length}}            </span>        </template>        <template slot-scope="{type,disabled,row}" slot="extendedDataArrForm">            <el-button type="primary"                       size="small"                       @click="dialogVisible = true">EDI CODE            </el-button>        </template> -->      <template slot="code" slot-scope="scope">        <avue-text-ellipsis :text="scope.row.code" :height="30" use-tooltip placement="top">          <small slot="more">...</small>        </avue-text-ellipsis>      </template>      <template slot="cnName" slot-scope="scope">        <avue-text-ellipsis :text="scope.row.cnName" :height="30" use-tooltip placement="top">          <small slot="more">...</small>        </avue-text-ellipsis>      </template>      <template slot="enName" slot-scope="scope">        <avue-text-ellipsis :text="scope.row.enName" :height="30" use-tooltip placement="top">          <small slot="more">...</small>        </avue-text-ellipsis>      </template>      <template slot="cntyCode" slot-scope="scope">        <avue-text-ellipsis :text="scope.row.enName" :height="30" use-tooltip placement="top">          <small slot="more">...</small>        </avue-text-ellipsis>      </template>      <template slot="cntyName" slot-scope="scope">        <avue-text-ellipsis :text="scope.row.enName" :height="30" use-tooltip placement="top">          <small slot="more">...</small>        </avue-text-ellipsis>      </template>      <template slot="remarks" slot-scope="scope">        <avue-text-ellipsis :text="scope.row.remarks" :height="30" use-tooltip placement="top">          <small slot="more">...</small>        </avue-text-ellipsis>      </template>      <template slot="menuLeft">        <el-button type="danger"                   size="small"                   icon="el-icon-delete"                   plain                   v-if="permission.bvessels_delete"                   @click="handleDelete">删 除        </el-button>      </template>    </avue-crud>    <el-dialog          title="EDI CODE"          :visible.sync="dialogVisible"          width="50%"          append-to-body          :destroy-on-close="true"          :modal-append-to-body="false"          :before-close="handleClose">          <div>              <el-button type="primary"                         size="small"                         :disabled="extendedDisabled"                         @click="extendedDataAdd">新增              </el-button>              <el-table                  :data="form.extendedDataArr"                  style="width: 100%">                  <el-table-column                      prop="name"                      label="名称">                      <template slot-scope="{row}">                          <el-input v-if="row.edit" size="mini" v-model="row.name" placeholder="请输入名称"></el-input>                          <span v-else>{{row.name}}</span>                      </template>                  </el-table-column>                  <el-table-column                      prop="value"                      label="键值">                      <template slot-scope="{row}">                          <el-input v-if="row.edit" size="mini" v-model="row.value" placeholder="请输入键值"></el-input>                          <span v-else>{{row.value}}</span>                      </template>                  </el-table-column>                  <el-table-column label="操作">                      <template slot-scope="scope">                          <el-button                              type="text"                              size="mini"                              :disabled="extendedDisabled"                              @click="extendedDataEdit(scope.$index, scope.row)">{{scope.row.edit?'保存':'编辑'}}</el-button>                          <el-button                              size="mini"                              type="text"                              :disabled="extendedDisabled"                              @click="extendedDataDelete(scope.$index, scope.row)">删除</el-button>                      </template>                  </el-table-column>              </el-table>          </div>          <span slot="footer" class="dialog-footer">                <el-button @click="dialogVisible = false;extendedDisabled = false">取 消</el-button>                <el-button type="primary" @click="dialogVisible = false;extendedDisabled = false">确 定</el-button>          </span>      </el-dialog>  </basic-container></template><script>  import {getBvesselsList, getBvesselsDetail, addBvessels, updateBvessels, removeBvessels} from "@/api/iosBasicData/bvessels";  import {mapGetters} from "vuex";  export default {    data() {      return {          // 扩展数据弹窗          dialogVisible:false,        form: {            extendedDataArr:[]        },        // form: {},        query: {},        loading: true,        page: {          pageSize: 10,          currentPage: 1,          total: 0        },        selectionList: [],        option: {},        optionBack: {          height:'auto',          stripe: true,          searchIcon: true,          searchIndex: 3,          calcHeight: 30,          tip: false,          searchShow: true,          searchMenuSpan: 6,          border: true,          index: true,          viewBtn: true,          selection: true,          dialogClickModal: false,          column: [            // {            //   label: "主键",            //   prop: "id",            //   rules: [{            //     required: true,            //     message: "请输入主键",            //     trigger: "blur"            //   }]            // },            // {            //   label: "创建人 Id",            //   prop: "createUser",            //   rules: [{            //     required: true,            //     message: "请输入创建人 Id",            //     trigger: "blur"            //   }]            // },            // {            //   label: "创建人",            //   prop: "createUserName",            //   rules: [{            //     required: true,            //     message: "请输入创建人",            //     trigger: "blur"            //   }]            // },            // {            //   label: "创建部门 Id",            //   prop: "createDept",            //   rules: [{            //     required: true,            //     message: "请输入创建部门 Id",            //     trigger: "blur"            //   }]            // },            // {            //   label: "创建部门",            //   prop: "createDeptName",            //   rules: [{            //     required: true,            //     message: "请输入创建部门",            //     trigger: "blur"            //   }]            // },            // {            //   label: "创建时间",            //   prop: "createTime",            //   rules: [{            //     required: true,            //     message: "请输入创建时间",            //     trigger: "blur"            //   }]            // },            // {            //   label: "修改人 Id",            //   prop: "updateUser",            //   rules: [{            //     required: true,            //     message: "请输入修改人 Id",            //     trigger: "blur"            //   }]            // },            // {            //   label: "修改人",            //   prop: "updateUserName",            //   rules: [{            //     required: true,            //     message: "请输入修改人",            //     trigger: "blur"            //   }]            // },            // {            //   label: "修改时间",            //   prop: "updateTime",            //   rules: [{            //     required: true,            //     message: "请输入修改时间",            //     trigger: "blur"            //   }]            // },            {              label: "编码",              prop: "code",              search: true,              slot: true,              rules: [{                required: true,                message: "请输入编码",                trigger: "blur"              }]            },            {              label: "中文船名",              prop: "cnName",              search: true,              slot: true,              rules: [{                required: true,                message: "请输入中文船名",                trigger: "blur"              }]            },            {              label: "英文船名",              prop: "enName",              search: true,              slot: true,              rules: [{                required: true,                message: "请输入英文船名",                trigger: "blur"              }]            },            {              label: "船舶注册国家代码",              prop: "cntyCode",              search: true,              slot: true,              width: "120"            },            {              label: "船舶注册国家名称",              prop: "cntyName",              search: true,              slot: true,              width: "120"            },            {              label: "船舶呼号",              prop: "afrno",              search: true,            },            {              label: "IMONO",              prop: "imono",            },            {              label: "MMSI",              prop: "mmsi",            },            {              label: "船公司 Id",              prop: "carrierId",              search: true,              hide:true,              rules: [{                required: true,                message: "请输入船公司 Id",                trigger: "blur"              }]            },            {              label: "船公司名称",              prop: "carrierName",              width: "100",              display:false,            },            {              label: "港务局编码",              prop: "portOfficeCode",              search: true,              width: "100",              rules: [{                required: true,                message: "请输入港务局编码",                trigger: "blur"              }]            },            {              label: "港务局中文船名",              prop: "portOfficeCnName",              search: true,              width: "120",              rules: [{                required: true,                message: "请输入港务局中文船名",                trigger: "blur"              }]            },            {              label: "港务局英文船名",              prop: "portOfficeEnName",              search: true,              width: "120",              rules: [{                required: true,                message: "请输入港务局英文船名",                trigger: "blur"              }]            },            {              label: "港务局船公司代码",              prop: "portOfficeCarrierCode",              search: true,              width: "120",              rules: [{                required: true,                message: "请输入港务局船公司代码",                trigger: "blur"              }]            },            {                  label: "EDI CODE",                  prop: "extendedDataArr",                  type:'tree',                  formslot:true,                  dicData:[],                  // rules: [{                  //     required: true,                  //     message: "请输入EDI CODE",                  //     trigger: "blur"                  // }]            },            // {            //   label: "JSON 对象数组,用于不查询的扩展数据, 例如:[{name: "key1", value: "value1"}]",            //   prop: "extendedData",            //   rules: [{            //     required: true,            //     message: "请输入JSON 对象数组,用于不查询的扩展数据, 例如:[{name: "key1", value: "value1"}]",            //     trigger: "blur"            //   }]            // },            {              label: "版本",              prop: "version",              display:false,            },            {              label: "状态",              prop: "status",              type: "select",              dicData:[{                label:'启用',                value:0              },{                label:'停用',                value:1              }],              value: 0            },            // {            //   label: "是否已删除(0 否 1是)",            //   prop: "isDeleted",            //   rules: [{            //     required: true,            //     message: "请输入是否已删除(0 否 1是)",            //     trigger: "blur"            //   }]            // },            {              label: "备注",              prop: "remarks",              type: 'textarea',              width: "180",              slot: true            },          ]        },        data: []      };    },    computed: {      ...mapGetters(["permission"]),      permissionList() {        return {          // addBtn: this.vaildData(this.permission.bvessels_add, false),          // viewBtn: this.vaildData(this.permission.bvessels_view, false),          // delBtn: this.vaildData(this.permission.bvessels_delete, false),          // editBtn: this.vaildData(this.permission.bvessels_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(293), this.optionBack);    },    methods: {      // 扩展数据详情的---------------------------------------        // 扩展数据添加        extendedDataAdd(){            this.form.extendedDataArr.map(item=>{                item.edit = false            })            this.form.extendedDataArr.push({                edit:true            })        },        // 扩展数据编辑        extendedDataEdit(index,row) {            row.edit = !row.edit        },        // 扩展数据删除        extendedDataDelete(index,row) {            this.form.extendedDataArr.splice(index,1)        },        // 扩展数据表格点击查询详情        extendedDataview(row){            this.form = row            this.extendedDisabled = true            this.dialogVisible = true        },        // 扩展数据弹窗关闭        handleClose(done){            this.$confirm('确认关闭?')                .then(_ => {                    done();                })                .catch(_ => {});        },        // 表格操作------------------------------------------------------------      rowSave(row, done, loading) {          // row.extendedDataArr.map(item=>{          //     delete item.edit          // })          // row.extendedData = JSON.stringify(row.extendedDataArr)          // delete row.extendedDataArr        addBvessels(row).then(() => {          this.onLoad(this.page);          this.$message({            type: "success",            message: "操作成功!"          });          done();        }, error => {          loading();          window.console.log(error);        });      },      rowUpdate(row, index, done, loading) {        // if (row.status === 1) {          // row.extendedDataArr.map(item=>{          //     delete item.edit          // })          // row.extendedData = JSON.stringify(row.extendedDataArr)          // delete row.extendedDataArr          updateBvessels(row).then(() => {            this.onLoad(this.page);            this.$message({              type: "success",              message: "操作成功!"            });            done();          }, error => {            loading();            console.log(error);          });        // } else {        //   this.$message({        //     message: '非禁用状态无法修改',        //     type: 'warning'        //   });        // }      },      // putStatus(row) {      //   console.log(row.status);      //   if (row.status == 0) {      //     row.status = 1      //   } else if (row.status == 1) {      //     row.status = 0      //   }      //   updateBvessels(row).then(() => {      //     this.onLoad(this.page);      //     this.$message({      //       type: "success",      //       message: "操作成功!"      //     });      //   }, error => {      //     loading();      //     console.log(error);      //   });      //   // this.$forceUpdate      // },      rowDel(row) {        if (row.status === 1) {          this.$confirm("确定将选择数据删除?", {            confirmButtonText: "确定",            cancelButtonText: "取消",            type: "warning"          })            .then(() => {              return removeBvessels(row.id);            })            .then(() => {              this.onLoad(this.page);              this.$message({                type: "success",                message: "操作成功!"              });            });        } else {          this.$message({            message: '非禁用状态无法删除',            type: 'warning'          });        }      },      handleDelete() {        if (this.selectionList.length === 0) {          this.$message.warning("请选择至少一条数据");          return;        }        this.$confirm("确定将选择数据删除?", {          confirmButtonText: "确定",          cancelButtonText: "取消",          type: "warning"        })          .then(() => {            return removeBvessels(this.ids);          })          .then(() => {            this.onLoad(this.page);            this.$message({              type: "success",              message: "操作成功!"            });            this.$refs.crud.toggleSelection();          });      },      beforeOpen(done, type) {        if (["edit", "view"].includes(type)) {          getBvesselsDetail(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;        getBvesselsList(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 lang="scss" scoped>::v-deep#out-table .back-one {        background: #ecf5ff !important;    }    ::v-deep#out-table .back-two {        background: #ecf5ff !important;    }/deep/ .el-col-md-8 {  width: 24.33333%;}</style>
 |