xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!

table index & delete array item

https://www.iviewui.com/components/table#ZDYLMB


编辑 row =
 {
    "keyword": "",
    "value": "",
    "description": "",
    "index": 3,
    "operate": [
        "edit",
        "save",
        "cancel"
    ],
    "isEdit": false,
    "_index": 2,
    "_rowKey": 49
} 3

demo


<!DOCTYPE html>
<html lang="zh-Hans">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <meta name="author" content="xgqfrms">
    <meta name="generator" content="VS code">
    <title>vue & iview</title>
    <!-- libs -->
    <link rel="stylesheet" href="./ivew-3.3.3/iview.css">
    <script src="./ivew-3.3.3/vue-2.6.10/vue.min.js"></script>
    <script src="./ivew-3.3.3/iview.min.js"></script>
    <!-- css -->
    <style lang="css">
        .audit-common-lable{
             120px;
            display: inline-block;
            text-align: left;
            margin: 5px;
        }
        .audit-common-lable-long{
             60px;
            display: inline-block;
            text-align: right;
        }
        .audit-common-lable::after,
        .audit-common-lable-long::after{
            display: inline-block;
            content: ":";
             0;
            border: 1px;
            margin: 2px;
        }
    </style>
</head>
<body>
    <section>
        <div id="app">
            <template>
                <i-row>
                    <i-col span="24" push="1" style="margin: 5px;">
                        <span class="audit-common-lable-long">请求方式</span>
                        <i-switch
                            style=" 57px"
                            size="large"
                            @on-change="onSwitchChange"
                            v-model="isGet">
                            <span slot="open">GET</span>
                            <span slot="close">POST</span>
                        </i-switch>
                    </i-col>
                </i-row>
            </template>
            <template>
                <i-row>
                    <i-col span="24" push="1" style="margin: 5px;">
                        <span class="audit-common-lable-long">URL</span>
                        <i-input
                            v-model="url"
                            placeholder="请输入 URL"
                            style=" 300px"
                            prefix="md-link"
                        />
                    </i-col>
                </i-row>
            </template>
            <template>
                <i-row>
                    <i-col span="24" push="1" style="margin: 5px;">
                        <span class="audit-common-lable-long">授权方式</span>
                        <i-select
                            aria-placeholder="授权方式"
                            placeholder="请选择授权方式"
                            style=" 200px"
                            v-model="authorization"
                            @on-change="onChangeSelect(`authorization`)"
                            :filterable="false"
                            :clearable="false">
                            <i-option
                                v-for="(item, i) in authorizations"
                                :value="item.value"
                                :key="i">
                                {{item.title}}
                            </i-option>
                        </i-select>
                    </i-col>
                </i-row>
            </template>
            <template>
                <i-row v-if="authorization==='auth'">
                    <i-col span="24" push="1" style="margin: 5px;">
                        <span class="audit-common-lable-long">Username</span>
                        <i-input
                            v-model="url"
                            placeholder="请输入 Username"
                            style=" 300px"
                            prefix="md-contact"
                        />
                    </i-col>
                    <i-col span="24" push="1" style="margin: 5px;">
                        <span class="audit-common-lable-long">Password</span>
                        <i-input
                            v-model="url"
                            placeholder="请输入 Password"
                            style=" 300px"
                            prefix="md-lock"
                        />
                    </i-col>
                </i-row>
            </template>
            <template>
                <i-row v-if="authorization==='token'">
                    <i-col span="24" push="1" style="margin: 5px;">
                        <span class="audit-common-lable-long">Token</span>
                        <i-input
                            v-model="url"
                            placeholder="请输入 Token!"
                            style=" 300px"
                            prefix="md-lock"
                        />
                    </i-col>
                </i-row>
            </template>
            <template v-if="isGet">
                <i-row>
                    <i-col span="18" push="1" style="margin: 5px;">
                        <span class="audit-common-lable">GET 参数列表</span>
                        <i-button
                            @click="addGetParams"
                            size="small">
                            + 添加
                        </i-button>
                        <!-- :maxHeight="maxGetHeight" -->
                        <i-table
                            style="margin: 5px; max-height: 300px; overflow-y: auto;"
                            :columns="colsGET"
                            :data="dataGET">
                        </i-table>
                    </i-col>
                </i-row>
            </template>
            <template v-else>
                <i-row>
                    <i-col span="23" push="1" style="margin: 5px;">
                        <span class="audit-common-lable">POST 参数方式</span>
                        <i-switch
                            style=" 57px"
                            size="large"
                            @on-change="onSwitchRadioChange"
                            v-model="isJSON">
                            <span slot="open">form data</span>
                            <span slot="close">JSON</span>
                        </i-switch>
                    </i-col>
                    <i-col span="23" push="1" style="margin: 5px;" v-if="isJSON">
                        <span class="audit-common-lable">参数类型(form data)</span>
                        <i-table
                            style="margin: 5px;"
                            :columns="colsPOST"
                            :data="dataPOST">
                        </i-table>
                    </i-col>
                    <i-col span="6" push="1" style="margin: 5px;" v-else>
                        <span class="audit-common-lable">参数类型(JSON)</span>
                        <i-input
                            style="margin: 5px;  500px;"
                            placeholder="请输入 JSON String"
                            v-model="jsonString"
                            :rows="8"
                            type="textarea">
                        </i-input>
                    </i-col>
                </i-row>
            </template>
            <template>
                <i-row>
                    <i-col span="24" push="1" style="margin: 5px;"></i-col>
                    <i-col span="2" push="1" style="margin: 5px;">
                        <i-button
                            @click="showSave"
                            size="small"
                            type="warning">
                            保存
                        </i-button>
                    </i-col>
                    <i-col span="2" push="0" style="margin: 5px;">
                        <i-button
                            :disabled="!isSaved"
                            @click="showExecute "
                            size="small"
                            type="primary">
                            执行
                        </i-button>
                    </i-col>
                </i-row>
                <Modal
                    v-model="saveModal.visible"
                    title="确定保存">
                    <span></span>
                    <div slot="footer">
                        <i-button
                            type="error"
                            size="large"
                            :loading="saveModal.loading"
                            @click="cancelSave">
                            取消
                        </i-button>
                        <i-button
                            type="success"
                            size="large"
                            :loading="saveModal.loading"
                            @click="resureSave">
                            确定
                        </i-button>
                    </div>
                </Modal>
                <Modal
                    v-model="executeModal.visible"
                    @on-ok="resureExecute"
                    @on-cancel="cancelExecute"
                    title="确定执行">
                    <!-- 确定执行 -->
                </Modal>
            </template>
        </div>
    </section>
    <!-- js -->
    <script>
        let vueApp = new Vue({
            el: "#app",
            data: {
                saveModal: {
                    visible: false,
                    loading: false,
                },
                executeModal: {
                    visible: false,
                    loading: false,
                },
                isGet: true,
                colsGET: [
                    {
                        title: "index",
                        key: "index",
                    },
                    {
                        title: "params.index",
                        key: "index",
                         200,
                        render: (h, params) => {
                            return h("div", [
                                h("span", params.index),
                            ]);
                        }
                    },
                    {
                        title: "key",
                        key: "keyword",
                        render: (h, params) => {
                            let {
                                isEdit,
                                keyword,
                            } = params.row;
                            if (isEdit) {
                                return h("div", [
                                    h("input", {
                                        attrs: {
                                            value: keyword,
                                            placeholder: "请输入 keyword",
                                        },
                                        on: {
                                            change: (e) => {
                                                let value = e.target.value;
                                                // console.log(`e =`, e);
                                                // console.log(`e.target =`, e.target);
                                                console.log(`input value =`, value);
                                                vueApp.updateTempGet(`keyword`, value);
                                            },
                                        }
                                    }, ""),
                                ]);
                            } else {
                                return h("div", [
                                    h("span", keyword),
                                ]);
                            }
                        }
                    },
                    {
                        title: "value",
                        key: "value",
                        render: (h, params) => {
                            let {
                                isEdit,
                                value,
                            } = params.row;
                            if (isEdit) {
                                return h("div", [
                                    h("input", {
                                        attrs: {
                                            value: value,
                                            placeholder: "请输入 value",
                                        },
                                        on: {
                                            change: (e) => {
                                                let value = e.target.value;
                                                vueApp.updateTempGet(`value`, value);
                                            },
                                        }
                                    }, ""),
                                ]);
                            } else {
                                return h("div", [
                                    h("span", value),
                                ]);
                            }
                        }
                    },
                    {
                        title: "desc",
                        key: "description",
                        render: (h, params) => {
                            let {
                                isEdit,
                                description: desc,
                            } = params.row;
                            if (isEdit) {
                                return h("div", [
                                    h("input", {
                                        attrs: {
                                            value: desc,
                                            placeholder: "请输入描述信息",
                                        },
                                        on: {
                                            change: (e) => {
                                                let value = e.target.value;
                                                vueApp.updateTempGet(`description`, value);
                                            },
                                        }
                                    }, ""),
                                ]);
                            } else {
                                return h("div", [
                                    h("span", desc),
                                ]);
                            }
                        }
                    },
                    {
                        title: "操作",
                        key: "operate",
                        render: (h, params) => {
                            let that = this;
                            let isEdit = params.row.isEdit;
                            let edit = params.row.operate[0];
                            let save = params.row.operate[1];
                            if (isEdit) {
                                return h("div", [
                                    h("Icon", {
                                        props: {
                                            name: "person"
                                        }
                                    }),
                                    h("a", {
                                        on: {
                                            click: () => {
                                                vueApp.clickSave(params.index);
                                            },
                                        },
                                    }, save),
                                ]);
                            } else {
                                return h("div", [
                                    h("a", {
                                        on: {
                                            click: () => {
                                                console.log(`编辑 row =
`, JSON.stringify(params.row, null, 4), params.row.index);
                                                // that.clickEdit(params.row.index);
                                                vueApp.clickEdit(params.row.index);
                                                // that.vueApp.clickEdit(params.row.index);
                                                // that.vueApp.methods.clickEdit(params.row.index);
                                            },
                                            // click: that.clickEdit(params.row.index),
                                        },
                                    }, edit),
                                    h("a", {
                                        on: {
                                            click: () => {
                                                vueApp.clickDelete(params.index);
                                                // vueApp.clickDelete(params.row._index);
                                                // vueApp.clickDelete(params.row.index);
                                            },
                                        },
                                    }, "删除"),
                                ]);
                            }
                        },
                    },
                ],
                dataGET: [
                    {
                        index: 0,
                        keyword: "a",
                        value: "1",
                        description: "a=1",
                        operate: ["edit", "save", "cancel"],
                        isEdit: false,
                    },
                    {
                        index: 1,
                        keyword: "b",
                        value: "2",
                        description: "b=1",
                        operate: ["edit", "save", "cancel"],
                        isEdit: false,
                    },
                ],
                colsPOST: [],
                dataPOST: [],
                authorizations: [
                    {
                        title: "No Auth",
                        value: "no",
                    },
                    {
                        title: "Basic Auth",
                        value: "auth",
                    },
                    {
                        title: "Bearer Token",
                        value: "token",
                    },
                ],
                url: "",
                authorization: "no",
                isJSON: true,
                postType: "form",
                jsonString: "",
                isSaved: false,
                maxGetHeight: 300,
                tempGet: {
                    keyword: "",
                    value: "",
                    description: "",
                },
                tempGetInit: {
                    keyword: "",
                    value: "",
                    description: "",
                    // index: null,
                    // operate: ["edit", "save"],
                    // isEdit: false,
                },
            },
            methods: {
                updateTempGet(type = ``, value = ``) {
                    if(type) {
                        this.tempGet[type] = value;
                    }
                },
                addGetParams() {
                    let index = this.dataGET.length;
                    this.dataGET.push({
                        keyword: "",
                        value: "",
                        description: "",
                        index,
                        operate: ["edit", "save", "cancel"],
                        isEdit: false,
                    });
                },
                showSave() {
                    this.saveModal.visible = true;
                },
                showExecute() {
                    this.executeModal.visible = true;
                },
                resureSave() {
                    this.saveModal.visible = false;
                    this.isSaved = true;
                },
                cancelSave() {
                    this.saveModal.visible = false;
                    this.isSaved = false;
                },
                resureExecute() {
                    this.executeModal.visible = false;
                },
                cancelExecute() {
                    this.executeModal.visible = false;
                },
                onSwitchChange() {
                    // this.isGet = !this.isGet;
                    console.log(`value =`, this.isGet);
                },
                onSwitchRadioChange() {
                    let value = this.isJSON;
                    console.log(`isJSON value =`, value);
                    if (value) {
                        this.postType = "json";
                    } else {
                        this.postType = "form";
                    }
                    console.log(`postType = `, this.postType);
                },
                onChangeSelect (type = ``) {
                    let value = this[type];
                    // this.$Message.info(value);
                },
                onChangeRadio (type = ``) {
                    let value = this[type];
                    this.$Message.info(value);
                },
                onChangeRadioGroup (type = ``) {
                    let value = this[type];
                    this.$Message.info(value);
                },
                clickSave(index = ``) {
                    if (index !== ``) {
                        // console.log(`table index =`, index);
                        this.dataGET[index].isEdit = false;
                        // temp
                        let {
                            keyword,
                            value,
                            description,
                        } = this.tempGet;
                        this.dataGET[index] = {
                            keyword,
                            value,
                            description,
                            index: index,
                            operate: ["edit", "save"],
                            isEdit: false,
                        };
                    }
                },
                clickEdit(index = ``) {
                    if (index !== ``) {
                        // console.log(`table index =`, index);
                        this.dataGET[index].isEdit = true;
                        let {
                            keyword,
                            value,
                            description,
                        } =  this.dataGET[index];
                        this.tempGet = {
                            keyword,
                            value,
                            description,
                        };
                        console.log(`tempGet =`, JSON.stringify(this.tempGet, null, 4));
                    }
                },
                clickDelete(index = ``) {
                    if (index !== ``) {
                        // slice
                        this.dataGET.splice(index, 1);
                        this.tempGet = this.tempGetInit;
                        let newData = this.dataGET || [];
                        // console.log(`newData =`, JSON.stringify(newData, null, 4));
                        this.updateDataGETIndex(newData);
                    }
                },
                // id ??? index
                updateDataGETIndex(data = []) {
                    let result = [];
                    result = data.map((item, i) => {
                        console.log(`item =`, JSON.stringify(item, null, 4));
                        let obj = Object.assign({}, item, {
                            index: i,
                        });
                        console.log(`obj =`, JSON.stringify(obj, null, 4));
                        return obj;
                    });
                    return result;
                },
            },
            mounted() {
                //
            },
        });
      </script>
</body>
</html>


原文地址:https://www.cnblogs.com/xgqfrms/p/10712332.html