zoukankan      html  css  js  c++  java
  • 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>
    
    
    
  • 相关阅读:
    OpenCV-2.4.6-android-sdk 人脸识别demo搭建
    Vmware 8.00 文件共享ubuntu
    C#_ 项目打包附加数据库
    show()与showDialog()的区别
    列不属于表--可能出现的问题总结
    每个开发人员现在应该下载的十种必备工具
    C#生成XML的三种途径
    为什么DropDownList的SelectedIndexChanged事件触发不了
    SQL Server 2017搭建主从备份
    .NET Core 微服务架构-Docker部署
  • 原文地址:https://www.cnblogs.com/xgqfrms/p/10712332.html
Copyright © 2011-2022 走看看