82ecc745567a9b2d80c650454dab1379.json 18 KB

1
  1. {"remainingRequest":"/usr/local/develop/php/www/waibao/NN2024071001/NN2024071001/addons/admin/node_modules/vue-loader/lib/index.js??vue-loader-options!/usr/local/develop/php/www/waibao/NN2024071001/NN2024071001/addons/admin/src/views/system/city/index.vue?vue&type=script&lang=js&","dependencies":[{"path":"/usr/local/develop/php/www/waibao/NN2024071001/NN2024071001/addons/admin/src/views/system/city/index.vue","mtime":1618041424000},{"path":"/usr/local/develop/php/www/waibao/NN2024071001/NN2024071001/addons/admin/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/usr/local/develop/php/www/waibao/NN2024071001/NN2024071001/addons/admin/node_modules/babel-loader/lib/index.js","mtime":499162500000},{"path":"/usr/local/develop/php/www/waibao/NN2024071001/NN2024071001/addons/admin/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/usr/local/develop/php/www/waibao/NN2024071001/NN2024071001/addons/admin/node_modules/vue-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KDQppbXBvcnQgeyBtYXBHZXR0ZXJzIH0gZnJvbSAidnVleCI7DQpleHBvcnQgZGVmYXVsdCB7DQogIG5hbWU6ICJTeXNDaXR5IiwNCiAgZGF0YSgpIHsNCiAgICByZXR1cm4gew0KICAgICAgbG9hZGluZzogdHJ1ZSwgIC8vIOWKoOi9veeKtuaAgQ0KICAgICAgZGF0YTogW10sICAvLyDliJfooajmlbDmja4NCiAgICAgIHdoZXJlOiB7fSwgIC8vIOaQnOe0ouadoeS7tg0KICAgICAgc2hvd0VkaXQ6IGZhbHNlLCAgLy8g5piv5ZCm5pi+56S66KGo5Y2V5by556qXDQogICAgICBmb3JtOiB7fSwgIC8vIOihqOWNleaVsOaNrg0KICAgICAgcnVsZXM6IHsgIC8vIOihqOWNlemqjOivgeinhOWImQ0KICAgICAgICBuYW1lOiBbDQogICAgICAgICAge3JlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAn6K+36L6T5YWl5Z+O5biC5ZCN56ewJywgdHJpZ2dlcjogJ2JsdXInfQ0KICAgICAgICBdLA0KICAgICAgICBzb3J0OiBbDQogICAgICAgICAge3JlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAn6K+36L6T5YWl5o6S5bqP5Y+3JywgdHJpZ2dlcjogJ2JsdXInfQ0KICAgICAgICBdDQogICAgICB9DQogICAgfQ0KICB9LA0KICBjb21wdXRlZDogew0KICAgIC4uLm1hcEdldHRlcnMoWyJwZXJtaXNzaW9uIl0pLA0KICB9LA0KICBtb3VudGVkKCkgew0KICAgIHRoaXMucXVlcnkoKTsNCiAgfSwNCiAgbWV0aG9kczogew0KICAgIC8qIOafpeivoiAqLw0KICAgIHF1ZXJ5KCkgew0KICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTsNCiAgICAgIHRoaXMuJGh0dHAuZ2V0KCcvY2l0eS9pbmRleCcsIHtwYXJhbXM6IHRoaXMud2hlcmV9KS50aGVuKHJlcyA9PiB7DQogICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlOw0KICAgICAgICBpZiAocmVzLmRhdGEuY29kZSA9PT0gMCkgew0KICAgICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuJHV0aWwudG9UcmVlRGF0YShyZXMuZGF0YS5kYXRhLCAnaWQnLCAncGlkJyk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihyZXMuZGF0YS5tc2cgfHwgJ+iOt+WPluaVsOaNruWksei0pScpOw0KICAgICAgICB9DQogICAgICB9KS5jYXRjaChlID0+IHsNCiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7DQogICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IoZS5tZXNzYWdlKTsNCiAgICAgIH0pOw0KICAgIH0sDQogICAgLyoqDQogICAgICog5byC5q2l5Yqg6L295pWw5o2uDQogICAgICovDQogICAgbG9hZCh0cmVlLCB0cmVlTm9kZSwgcmVzb2x2ZSkgew0KICAgICAgdGhpcy53aGVyZVsncGlkJ10gPSB0cmVlLmlkOw0KICAgICAgdGhpcy4kaHR0cC5nZXQoJy9jaXR5L2luZGV4Jywge3BhcmFtczogdGhpcy53aGVyZX0pLnRoZW4ocmVzID0+IHsNCiAgICAgICAgaWYgKHJlcy5kYXRhLmNvZGUgPT09IDApIHsNCiAgICAgICAgICByZXNvbHZlKHJlcy5kYXRhLmRhdGEpDQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihyZXMuZGF0YS5tc2cpOw0KICAgICAgICB9DQogICAgICB9KS5jYXRjaChlID0+IHsNCiAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihlLm1lc3NhZ2UpOw0KICAgICAgfSk7DQogICAgfSwNCiAgICAvKiDmmL7npLrmt7vliqAgKi8NCiAgICBhZGQocm93KSB7DQogICAgICB0aGlzLmZvcm0gPSB7c29ydDogMCwgcGlkOiByb3cgPyByb3cuaWQgOiBudWxsfTsNCiAgICAgIHRoaXMuc2hvd0VkaXQgPSB0cnVlOw0KICAgIH0sDQogICAgLyog5pi+56S657yW6L6RICovDQogICAgZWRpdChyb3cpIHsNCiAgICAgIHRoaXMuZm9ybSA9IE9iamVjdC5hc3NpZ24oe30sIHJvdywge3BpZDogcm93LnBpZCB8fCBudWxsfSk7DQogICAgICB0aGlzLnNob3dFZGl0ID0gdHJ1ZTsNCiAgICB9LA0KICAgIC8qIOS/neWtmOe8lui+kSAqLw0KICAgIHNhdmUoKSB7DQogICAgICB0aGlzLiRyZWZzWydlZGl0Rm9ybSddLnZhbGlkYXRlKCh2YWxpZCkgPT4gew0KICAgICAgICBpZiAodmFsaWQpIHsNCiAgICAgICAgICBjb25zdCBsb2FkaW5nID0gdGhpcy4kbG9hZGluZyh7bG9jazogdHJ1ZX0pOw0KICAgICAgICAgIHRoaXMuJGh0dHAucG9zdCgnL2NpdHkvZWRpdCcsDQogICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZm9ybSwge3BpZDogdGhpcy5mb3JtLnBpZCB8fCAwfSkNCiAgICAgICAgICApLnRoZW4ocmVzID0+IHsNCiAgICAgICAgICAgIGxvYWRpbmcuY2xvc2UoKTsNCiAgICAgICAgICAgIGlmIChyZXMuZGF0YS5jb2RlID09PSAwKSB7DQogICAgICAgICAgICAgIHRoaXMuc2hvd0VkaXQgPSBmYWxzZTsNCiAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7dHlwZTogJ3N1Y2Nlc3MnLCBtZXNzYWdlOiByZXMuZGF0YS5tc2d9KTsNCiAgICAgICAgICAgICAgaWYgKHRoaXMuZm9ybS5pZCkgew0KICAgICAgICAgICAgICAgIC8vIOabtOaWsOaVsOaNrg0KICAgICAgICAgICAgICAgIHRoaXMuJHV0aWwuZWFjaFRyZWVEYXRhKHRoaXMuZGF0YSwgaXRlbSA9PiB7DQogICAgICAgICAgICAgICAgICBpZiAoaXRlbS5pZCA9PT0gdGhpcy5mb3JtLmlkKSB7DQogICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oaXRlbSwgdGhpcy5mb3JtKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIHRoaXMucXVlcnkoKTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihyZXMuZGF0YS5tc2cpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0pLmNhdGNoKGUgPT4gew0KICAgICAgICAgICAgbG9hZGluZy5jbG9zZSgpOw0KICAgICAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihlLm1lc3NhZ2UpOw0KICAgICAgICAgIH0pOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KICAgICAgfSk7DQogICAgfSwNCiAgICAvKiDliKDpmaQgKi8NCiAgICByZW1vdmUocm93KSB7DQogICAgICBpZiAocm93LmNoaWxkcmVuICYmIHJvdy5jaGlsZHJlbi5sZW5ndGggPiAwKSByZXR1cm4gdGhpcy4kbWVzc2FnZS5lcnJvcign6K+35YWI5Yig6Zmk5a2Q6IqC54K5Jyk7DQogICAgICBjb25zdCBsb2FkaW5nID0gdGhpcy4kbG9hZGluZyh7bG9jazogdHJ1ZX0pOw0KICAgICAgdGhpcy4kaHR0cC5wb3N0KCcvY2l0eS9kZWxldGUnLCB7aWQ6cm93LmlkfSkudGhlbihyZXMgPT4gew0KICAgICAgICBsb2FkaW5nLmNsb3NlKCk7DQogICAgICAgIGlmIChyZXMuZGF0YS5jb2RlID09PSAwKSB7DQogICAgICAgICAgdGhpcy4kbWVzc2FnZSh7dHlwZTogJ3N1Y2Nlc3MnLCBtZXNzYWdlOiByZXMuZGF0YS5tc2d9KTsNCiAgICAgICAgICAvLyDliKDpmaTmlbDmja4NCiAgICAgICAgICB0aGlzLiR1dGlsLmVhY2hUcmVlRGF0YSh0aGlzLmRhdGEsIGl0ZW0gPT4gew0KICAgICAgICAgICAgaWYgKGl0ZW0uaWQgPT09IHJvdy5waWQpIHsNCiAgICAgICAgICAgICAgaXRlbS5jaGlsZHJlbi5zcGxpY2UoaXRlbS5jaGlsZHJlbi5maW5kSW5kZXgoZCA9PiBkLmlkID09PSByb3cuaWQpLCAxKTsNCiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0pOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IocmVzLmRhdGEubXNnKTsNCiAgICAgICAgfQ0KICAgICAgfSkuY2F0Y2goZSA9PiB7DQogICAgICAgIGxvYWRpbmcuY2xvc2UoKTsNCiAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihlLm1lc3NhZ2UpOw0KICAgICAgfSk7DQogICAgfSwNCiAgICAvKioNCiAgICAgKiDlsZXlvIDlhajpg6gNCiAgICAgKi8NCiAgICBleHBlbmRBbGwoKXsNCiAgICAgIHRoaXMuZGF0YS5mb3JFYWNoKGQgPT4gew0KICAgICAgICB0aGlzLiRyZWZzLnRhYmxlLnRvZ2dsZVJvd0V4cGFuc2lvbihkLCB0cnVlKTsNCiAgICAgIH0pOw0KICAgIH0sDQogICAgLyoqDQogICAgICog5oqY5Y+g5YWo6YOoDQogICAgICovDQogICAgZm9sZEFsbCgpew0KICAgICAgdGhpcy5kYXRhLmZvckVhY2goZCA9PiB7DQogICAgICAgIHRoaXMuJHJlZnMudGFibGUudG9nZ2xlUm93RXhwYW5zaW9uKGQsIGZhbHNlKTsNCiAgICAgIH0pOw0KICAgIH0NCiAgfQ0KfQ0K"},{"version":3,"sources":["index.vue"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"index.vue","sourceRoot":"src/views/system/city","sourcesContent":["<template>\r\n <div class=\"ele-body\">\r\n <el-card shadow=\"never\">\r\n <!-- 搜索表单 -->\r\n <el-form :model=\"where\" label-width=\"77px\" class=\"ele-form-search\" @keyup.enter.native=\"query\"\r\n @submit.native.prevent>\r\n <el-row :gutter=\"15\">\r\n <el-col :md=\"6\" :sm=\"12\">\r\n <el-form-item label=\"城市名称:\">\r\n <el-input v-model=\"where.name\" placeholder=\"请输入城市名称\" clearable/>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :md=\"9\" :sm=\"12\">\r\n <div class=\"ele-form-actions\">\r\n <el-button type=\"primary\" @click=\"query\" icon=\"el-icon-search\" class=\"ele-btn-icon\">查询</el-button>\r\n <el-button @click=\"add()\" type=\"primary\" icon=\"el-icon-plus\" class=\"ele-btn-icon\" v-if=\"permission.includes('sys:city:add')\">添加</el-button>\r\n <el-button @click=\"expendAll()\" type=\"success\" icon=\"el-icon-_fold\" class=\"ele-btn-icon\" v-if=\"permission.includes('sys:city:expand')\">展开全部</el-button>\r\n <el-button @click=\"foldAll()\" type=\"warning\" icon=\"el-icon-_unfold\" class=\"ele-btn-icon\" v-if=\"permission.includes('sys:city:collapse')\">折叠全部</el-button>\r\n </div>\r\n </el-col>\r\n </el-row>\r\n </el-form>\r\n <!-- 数据表格 -->\r\n <el-table ref=\"table\" :data=\"data\" v-loading=\"loading\" row-key=\"id\" default-expand-all border\r\n height=\"calc(100vh - 215px)\" highlight-current-row lazy\r\n :load=\"load\"\r\n :tree-props=\"{children: 'children', hasChildren: 'hasChildren'}\">\r\n <el-table-column label=\"编号\" type=\"index\" width=\"60\" align=\"center\" fixed=\"left\"/>\r\n <el-table-column label=\"城市名称\" show-overflow-tooltip min-width=\"200\">\r\n <template slot-scope=\"{row}\">{{ row.name }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"城市等级\" width=\"100px\" align=\"center\">\r\n <template slot-scope=\"{row}\">\r\n <el-tag :type=\"['primary','success','warning'][row.level-1]\" size=\"mini\">{{ ['省份', '城市', '县区'][row.level-1] }}</el-tag>\r\n </template>\r\n </el-table-column>\r\n <el-table-column prop=\"citycode\" label=\"城市编码\" min-width=\"100\" align=\"center\"/>\r\n <el-table-column prop=\"adcode\" label=\"地里编码\" min-width=\"100\" align=\"center\"/>\r\n <el-table-column prop=\"lng\" label=\"经度\" min-width=\"100\" align=\"center\"/>\r\n <el-table-column prop=\"lat\" label=\"纬度\" min-width=\"100\" align=\"center\"/>\r\n <el-table-column prop=\"sort\" label=\"排序\" width=\"60px\" align=\"center\"/>\r\n <el-table-column label=\"创建时间\" show-overflow-tooltip min-width=\"160\" align=\"center\">\r\n <template slot-scope=\"{row}\">{{ row.create_time | toDateString }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"操作\" width=\"190px\" align=\"center\" :resizable=\"false\" fixed=\"right\">\r\n <template slot-scope=\"{row}\">\r\n <el-link @click=\"add(row)\" icon=\"el-icon-plus\" type=\"primary\" :underline=\"false\" v-if=\"permission.includes('sys:city:addz')\">添加</el-link>\r\n <el-link @click=\"edit(row)\" icon=\"el-icon-edit\" type=\"primary\" :underline=\"false\" v-if=\"permission.includes('sys:city:edit')\">修改</el-link>\r\n <el-popconfirm title=\"确定要删除此城市吗?\" @confirm=\"remove(row)\" class=\"ele-action\">\r\n <el-link slot=\"reference\" icon=\"el-icon-delete\" type=\"danger\" :underline=\"false\" v-if=\"permission.includes('sys:city:delete')\">删除</el-link>\r\n </el-popconfirm>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n </el-card>\r\n <!-- 编辑弹窗 -->\r\n <el-dialog :title=\"form.id?'修改城市':'添加城市'\" :visible.sync=\"showEdit\" width=\"400px\"\r\n @closed=\"form={}\" :destroy-on-close=\"true\" :lock-scroll=\"false\">\r\n <el-form :model=\"form\" ref=\"editForm\" :rules=\"rules\" label-width=\"82px\">\r\n <el-form-item label=\"城市名称:\" prop=\"name\">\r\n <el-input v-model=\"form.name\" placeholder=\"请输入城市名称\" clearable/>\r\n </el-form-item>\r\n <el-form-item label=\"城市等级:\">\r\n <el-radio-group v-model=\"form.level\">\r\n <el-radio :label=\"1\">省份</el-radio>\r\n <el-radio :label=\"2\">城市</el-radio>\r\n <el-radio :label=\"3\">县区</el-radio>\r\n </el-radio-group>\r\n </el-form-item>\r\n <el-form-item label=\"城市编码:\" prop=\"citycode\">\r\n <el-input v-model=\"form.citycode\" placeholder=\"请输入城市编码\" clearable/>\r\n </el-form-item>\r\n <el-form-item label=\"地里编码:\" prop=\"adcode\">\r\n <el-input v-model=\"form.adcode\" placeholder=\"请输入地里编码\" clearable/>\r\n </el-form-item>\r\n <el-form-item label=\"经度:\" prop=\"lng\">\r\n <el-input v-model=\"form.lng\" placeholder=\"请输入经度\" clearable/>\r\n </el-form-item>\r\n <el-form-item label=\"纬度:\" prop=\"lat\">\r\n <el-input v-model=\"form.lat\" placeholder=\"请输入纬度\" clearable/>\r\n </el-form-item>\r\n <el-form-item label=\"排序号:\" prop=\"sort\">\r\n <el-input-number v-model=\"form.sort\" controls-position=\"right\" :min=\"0\"\r\n placeholder=\"请输入排序号\" class=\"ele-fluid ele-text-left\"/>\r\n </el-form-item>\r\n </el-form>\r\n <div slot=\"footer\">\r\n <el-button @click=\"showEdit=false\">取消</el-button>\r\n <el-button type=\"primary\" @click=\"save\">保存</el-button>\r\n </div>\r\n </el-dialog>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { mapGetters } from \"vuex\";\r\nexport default {\r\n name: \"SysCity\",\r\n data() {\r\n return {\r\n loading: true, // 加载状态\r\n data: [], // 列表数据\r\n where: {}, // 搜索条件\r\n showEdit: false, // 是否显示表单弹窗\r\n form: {}, // 表单数据\r\n rules: { // 表单验证规则\r\n name: [\r\n {required: true, message: '请输入城市名称', trigger: 'blur'}\r\n ],\r\n sort: [\r\n {required: true, message: '请输入排序号', trigger: 'blur'}\r\n ]\r\n }\r\n }\r\n },\r\n computed: {\r\n ...mapGetters([\"permission\"]),\r\n },\r\n mounted() {\r\n this.query();\r\n },\r\n methods: {\r\n /* 查询 */\r\n query() {\r\n this.loading = true;\r\n this.$http.get('/city/index', {params: this.where}).then(res => {\r\n this.loading = false;\r\n if (res.data.code === 0) {\r\n this.data = this.$util.toTreeData(res.data.data, 'id', 'pid');\r\n } else {\r\n this.$message.error(res.data.msg || '获取数据失败');\r\n }\r\n }).catch(e => {\r\n this.loading = false;\r\n this.$message.error(e.message);\r\n });\r\n },\r\n /**\r\n * 异步加载数据\r\n */\r\n load(tree, treeNode, resolve) {\r\n this.where['pid'] = tree.id;\r\n this.$http.get('/city/index', {params: this.where}).then(res => {\r\n if (res.data.code === 0) {\r\n resolve(res.data.data)\r\n } else {\r\n this.$message.error(res.data.msg);\r\n }\r\n }).catch(e => {\r\n this.$message.error(e.message);\r\n });\r\n },\r\n /* 显示添加 */\r\n add(row) {\r\n this.form = {sort: 0, pid: row ? row.id : null};\r\n this.showEdit = true;\r\n },\r\n /* 显示编辑 */\r\n edit(row) {\r\n this.form = Object.assign({}, row, {pid: row.pid || null});\r\n this.showEdit = true;\r\n },\r\n /* 保存编辑 */\r\n save() {\r\n this.$refs['editForm'].validate((valid) => {\r\n if (valid) {\r\n const loading = this.$loading({lock: true});\r\n this.$http.post('/city/edit',\r\n Object.assign({}, this.form, {pid: this.form.pid || 0})\r\n ).then(res => {\r\n loading.close();\r\n if (res.data.code === 0) {\r\n this.showEdit = false;\r\n this.$message({type: 'success', message: res.data.msg});\r\n if (this.form.id) {\r\n // 更新数据\r\n this.$util.eachTreeData(this.data, item => {\r\n if (item.id === this.form.id) {\r\n Object.assign(item, this.form);\r\n return false;\r\n }\r\n });\r\n } else {\r\n this.query();\r\n }\r\n } else {\r\n this.$message.error(res.data.msg);\r\n }\r\n }).catch(e => {\r\n loading.close();\r\n this.$message.error(e.message);\r\n });\r\n } else {\r\n return false;\r\n }\r\n });\r\n },\r\n /* 删除 */\r\n remove(row) {\r\n if (row.children && row.children.length > 0) return this.$message.error('请先删除子节点');\r\n const loading = this.$loading({lock: true});\r\n this.$http.post('/city/delete', {id:row.id}).then(res => {\r\n loading.close();\r\n if (res.data.code === 0) {\r\n this.$message({type: 'success', message: res.data.msg});\r\n // 删除数据\r\n this.$util.eachTreeData(this.data, item => {\r\n if (item.id === row.pid) {\r\n item.children.splice(item.children.findIndex(d => d.id === row.id), 1);\r\n return false;\r\n }\r\n });\r\n } else {\r\n this.$message.error(res.data.msg);\r\n }\r\n }).catch(e => {\r\n loading.close();\r\n this.$message.error(e.message);\r\n });\r\n },\r\n /**\r\n * 展开全部\r\n */\r\n expendAll(){\r\n this.data.forEach(d => {\r\n this.$refs.table.toggleRowExpansion(d, true);\r\n });\r\n },\r\n /**\r\n * 折叠全部\r\n */\r\n foldAll(){\r\n this.data.forEach(d => {\r\n this.$refs.table.toggleRowExpansion(d, false);\r\n });\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n\r\n</style>"]}]}