1fbf732a0ccd015b573397bb598ae526.json 20 KB

1
  1. {"remainingRequest":"D:\\front\\item\\zyAdmin\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\front\\item\\zyAdmin\\src\\pages\\product\\productAttr\\addAttr.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\front\\item\\zyAdmin\\src\\pages\\product\\productAttr\\addAttr.vue","mtime":1761614939049},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1761614927801},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\babel-loader\\lib\\index.js","mtime":1761614927320},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1761614927801},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\vue-loader\\lib\\index.js","mtime":1761614937402}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:DQppbXBvcnQgeyBtYXBTdGF0ZSB9IGZyb20gJ3Z1ZXgnOw0KaW1wb3J0IHsgcnVsZUFkZEFwaSwgcnVsZUluZm9BcGkgfSBmcm9tICdAL2FwaS9wcm9kdWN0JzsNCmltcG9ydCB2dWVkcmFnZ2FibGUgZnJvbSAndnVlZHJhZ2dhYmxlJzsNCmV4cG9ydCBkZWZhdWx0IHsNCiAgbmFtZTogJ2FkZEF0dHInLA0KICBjb21wb25lbnRzOiB7DQogICAgZHJhZ2dhYmxlOiB2dWVkcmFnZ2FibGUsDQogIH0sDQogIGRhdGEoKSB7DQogICAgcmV0dXJuIHsNCiAgICAgIHNwaW5TaG93OiBmYWxzZSwNCiAgICAgIG1vZGFsX2xvYWRpbmc6IGZhbHNlLA0KICAgICAgZ3JpZDogew0KICAgICAgICB4bDogMywNCiAgICAgICAgbGc6IDMsDQogICAgICAgIG1kOiAxMiwNCiAgICAgICAgc206IDI0LA0KICAgICAgICB4czogMjQsDQogICAgICB9LA0KICAgICAgbW9kYWw6IGZhbHNlLA0KICAgICAgaW5kZXg6IDEsDQogICAgICBydWxlczogew0KICAgICAgICBydWxlX25hbWU6IFt7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAn6K+36L6T5YWl6KeE5qC85ZCN56ewJywgdHJpZ2dlcjogJ2JsdXInIH1dLA0KICAgICAgfSwNCiAgICAgIGZvcm1EeW5hbWljOiB7DQogICAgICAgIHJ1bGVfbmFtZTogJycsDQogICAgICAgIHNwZWM6IFtdLA0KICAgICAgfSwNCiAgICAgIGF0dHJzTmFtZTogJycsDQogICAgICBhdHRyc1ZhbDogJycsDQogICAgICBmb3JtRHluYW1pY05hbWVEYXRhOiBbXSwNCiAgICAgIGlzQnRuOiBmYWxzZSwNCiAgICAgIGZvcm1EeW5hbWljTmFtZTogW10sDQogICAgICByZXN1bHRzOiBbXSwNCiAgICAgIHJlc3VsdDogW10sDQogICAgICBpZHM6IDAsDQogICAgfTsNCiAgfSwNCiAgY29tcHV0ZWQ6IHt9LA0KICBtZXRob2RzOiB7DQogICAgaGFuZGxlU2hvd1BvcChpbmRleCkgew0KICAgICAgdGhpcy4kcmVmc1snaW5wdXRSZWZfJyArIGluZGV4XVswXS5mb2N1cygpOw0KICAgIH0sDQogICAgLy8g5Yig6Zmk6KeE5qC8DQogICAgaGFuZGxlUmVtb3ZlUm9sZShpbmRleCkgew0KICAgICAgdGhpcy5mb3JtRHluYW1pYy5zcGVjLnNwbGljZShpbmRleCwgMSk7DQogICAgICBpZiAoIXRoaXMuZm9ybUR5bmFtaWMuc3BlYy5sZW5ndGgpIHsNCiAgICAgICAgdGhpcy5mb3JtRHluYW1pYy5zcGVjID0gW107DQogICAgICB9DQogICAgfSwNCiAgICBoYW5kbGVBZGRSb2xlKCkgew0KICAgICAgbGV0IGRhdGEgPSB7DQogICAgICAgIHZhbHVlOiB0aGlzLmZvcm1EeW5hbWljLmF0dHJzTmFtZSwNCiAgICAgICAgZGV0YWlsOiBbXSwNCiAgICAgIH07DQogICAgICB0aGlzLmZvcm1EeW5hbWljLnNwZWMucHVzaChkYXRhKTsNCiAgICB9LA0KICAgIG9uQ2FuY2VsKCkgew0KICAgICAgdGhpcy5pZHMgPSAwOw0KICAgICAgdGhpcy5jbGVhcigpOw0KICAgIH0sDQogICAgb25DbG9zZSgpIHsNCiAgICAgIHRoaXMuaWRzID0gMDsNCiAgICAgIHRoaXMuY2xlYXIoKTsNCiAgICAgIHRoaXMubW9kYWwgPSBmYWxzZTsNCiAgICB9LA0KICAgIC8vIOa3u+WKoOaMiemSrg0KICAgIGFkZEJ0bigpIHsNCiAgICAgIHRoaXMuaXNCdG4gPSB0cnVlOw0KICAgIH0sDQogICAgLy8g6K+m5oOFDQogICAgZ2V0SW9mbyhyb3cpIHsNCiAgICAgIHRoaXMuc3BpblNob3cgPSB0cnVlOw0KICAgICAgdGhpcy5pZHMgPSByb3cuaWQ7DQogICAgICBydWxlSW5mb0FwaShyb3cuaWQpDQogICAgICAgIC50aGVuKChyZXMpID0+IHsNCiAgICAgICAgICB0aGlzLmZvcm1EeW5hbWljID0gcmVzLmRhdGEuaW5mbzsNCiAgICAgICAgICB0aGlzLnNwaW5TaG93ID0gZmFsc2U7DQogICAgICAgIH0pDQogICAgICAgIC5jYXRjaCgocmVzKSA9PiB7DQogICAgICAgICAgdGhpcy5zcGluU2hvdyA9IGZhbHNlOw0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IocmVzLm1zZyk7DQogICAgICAgIH0pOw0KICAgIH0sDQogICAgLy8g5o+Q5LqkDQogICAgaGFuZGxlU3VibWl0KG5hbWUpIHsNCiAgICAgIHRoaXMuJHJlZnNbbmFtZV0udmFsaWRhdGUoKHZhbGlkKSA9PiB7DQogICAgICAgIGlmICh2YWxpZCkgew0KICAgICAgICAgIGlmICh0aGlzLmZvcm1EeW5hbWljLnNwZWMubGVuZ3RoID09PSAwKSB7DQogICAgICAgICAgICByZXR1cm4gdGhpcy4kbWVzc2FnZS53YXJuaW5nKCfor7foh7PlsJHmt7vliqDkuIDmnaHllYblk4Hop4TmoLzvvIEnKTsNCiAgICAgICAgICB9DQogICAgICAgICAgdGhpcy5tb2RhbF9sb2FkaW5nID0gdHJ1ZTsNCiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsNCiAgICAgICAgICAgIHJ1bGVBZGRBcGkodGhpcy5mb3JtRHluYW1pYywgdGhpcy5pZHMpDQogICAgICAgICAgICAgIC50aGVuKChyZXMpID0+IHsNCiAgICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlLnN1Y2Nlc3MocmVzLm1zZyk7DQogICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7DQogICAgICAgICAgICAgICAgICB0aGlzLm1vZGFsID0gZmFsc2U7DQogICAgICAgICAgICAgICAgICB0aGlzLm1vZGFsX2xvYWRpbmcgPSBmYWxzZTsNCiAgICAgICAgICAgICAgICB9LCA1MDApOw0KICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gew0KICAgICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgnZ2V0TGlzdCcpOw0KICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhcigpOw0KICAgICAgICAgICAgICAgIH0sIDYwMCk7DQogICAgICAgICAgICAgIH0pDQogICAgICAgICAgICAgIC5jYXRjaCgocmVzKSA9PiB7DQogICAgICAgICAgICAgICAgdGhpcy5tb2RhbF9sb2FkaW5nID0gZmFsc2U7DQogICAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihyZXMubXNnKTsNCiAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgfSwgMTIwMCk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICB9KTsNCiAgICB9LA0KICAgIGNsZWFyKCkgew0KICAgICAgdGhpcy4kcmVmc1snZm9ybUR5bmFtaWMnXS5yZXNldEZpZWxkcygpOw0KICAgICAgdGhpcy5mb3JtRHluYW1pYy5zcGVjID0gW107DQogICAgICB0aGlzLmlzQnRuID0gZmFsc2U7DQogICAgICB0aGlzLmF0dHJzTmFtZSA9ICcnOw0KICAgICAgdGhpcy5hdHRyc1ZhbCA9ICcnOw0KICAgICAgdGhpcy5pZHMgPSAwOw0KICAgIH0sDQogICAgLy8g5Y+W5raIDQogICAgb2ZmQXR0ck5hbWUoKSB7DQogICAgICB0aGlzLmlzQnRuID0gZmFsc2U7DQogICAgfSwNCiAgICAvLyDliKDpmaQNCiAgICBoYW5kbGVSZW1vdmUoaW5kZXgpIHsNCiAgICAgIHRoaXMuZm9ybUR5bmFtaWMuc3BlYy5zcGxpY2UoaW5kZXgsIDEpOw0KICAgIH0sDQogICAgLy8g5Yig6Zmk5bGe5oCnDQogICAgaGFuZGxlUmVtb3ZlMihpdGVtLCBpbmRleCkgew0KICAgICAgaXRlbS5zcGxpY2UoaW5kZXgsIDEpOw0KICAgIH0sDQogICAgLy8g5re75Yqg6KeE5YiZ5ZCN56ewDQogICAgY3JlYXRlQXR0ck5hbWUoKSB7DQogICAgICBpZiAodGhpcy5hdHRyc05hbWUgJiYgdGhpcy5hdHRyc1ZhbCkgew0KICAgICAgICBsZXQgZGF0YSA9IHsNCiAgICAgICAgICB2YWx1ZTogdGhpcy5hdHRyc05hbWUsDQogICAgICAgICAgZGV0YWlsOiBbdGhpcy5hdHRyc1ZhbF0sDQogICAgICAgIH07DQogICAgICAgIHRoaXMuZm9ybUR5bmFtaWMuc3BlYy5wdXNoKGRhdGEpOw0KICAgICAgICB2YXIgaGFzaCA9IHt9Ow0KICAgICAgICB0aGlzLmZvcm1EeW5hbWljLnNwZWMgPSB0aGlzLmZvcm1EeW5hbWljLnNwZWMucmVkdWNlKGZ1bmN0aW9uIChpdGVtLCBuZXh0KSB7DQogICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgKi8NCiAgICAgICAgICBoYXNoW25leHQudmFsdWVdID8gJycgOiAoaGFzaFtuZXh0LnZhbHVlXSA9IHRydWUgJiYgaXRlbS5wdXNoKG5leHQpKTsNCiAgICAgICAgICByZXR1cm4gaXRlbTsNCiAgICAgICAgfSwgW10pOw0KICAgICAgICB0aGlzLmF0dHJzTmFtZSA9ICcnOw0KICAgICAgICB0aGlzLmF0dHJzVmFsID0gJyc7DQogICAgICAgIHRoaXMuaXNCdG4gPSBmYWxzZTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHRoaXMuJG1lc3NhZ2Uud2FybmluZygn6K+35re75Yqg6KeE5qC85ZCN56ew5oiW6KeE5qC85YC8Jyk7DQogICAgICB9DQogICAgfSwNCiAgICAvLyDmt7vliqDlsZ7mgKcNCiAgICBjcmVhdGVBdHRyKG51bSwgaWR4KSB7DQogICAgICBpZiAobnVtKSB7DQogICAgICAgIHRoaXMuZm9ybUR5bmFtaWMuc3BlY1tpZHhdLmRldGFpbC5wdXNoKG51bSk7DQogICAgICAgIHZhciBoYXNoID0ge307DQogICAgICAgIHRoaXMuZm9ybUR5bmFtaWMuc3BlY1tpZHhdLmRldGFpbCA9IHRoaXMuZm9ybUR5bmFtaWMuc3BlY1tpZHhdLmRldGFpbC5yZWR1Y2UoZnVuY3Rpb24gKGl0ZW0sIG5leHQpIHsNCiAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSAqLw0KICAgICAgICAgIGhhc2hbbmV4dF0gPyAnJyA6IChoYXNoW25leHRdID0gdHJ1ZSAmJiBpdGVtLnB1c2gobmV4dCkpOw0KICAgICAgICAgIHJldHVybiBpdGVtOw0KICAgICAgICB9LCBbXSk7DQogICAgICB9IGVsc2Ugew0KICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoJ+ivt+a3u+WKoOWxnuaApycpOw0KICAgICAgfQ0KICAgIH0sDQogIH0sDQp9Ow0K"},{"version":3,"sources":["addAttr.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;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":"addAttr.vue","sourceRoot":"src/pages/product/productAttr","sourcesContent":["<template>\r\n <el-dialog :visible.sync=\"modal\" @closed=\"onCancel\" title=\"商品规格\" width=\"1000px\" v-loading=\"spinShow\">\r\n <el-form\r\n ref=\"formDynamic\"\r\n :model=\"formDynamic\"\r\n :rules=\"rules\"\r\n class=\"attrFrom\"\r\n label-width=\"120px\"\r\n label-position=\"right\"\r\n @submit.native.prevent\r\n >\r\n <el-row :gutter=\"24\">\r\n <el-col :span=\"24\">\r\n <el-col :span=\"8\">\r\n <el-form-item label=\"规格模板名称:\" prop=\"rule_name\">\r\n <el-input placeholder=\"请输入标题名称\" :maxlength=\"20\" v-model.trim=\"formDynamic.rule_name\" />\r\n </el-form-item>\r\n </el-col>\r\n </el-col>\r\n <el-col :span=\"23\" class=\"noForm\" :key=\"index\">\r\n <el-form-item label=\"\">\r\n <div class=\"specifications\">\r\n <draggable group=\"specifications\" :list=\"formDynamic.spec\" handle=\".move-icon\" animation=\"300\">\r\n <div class=\"specifications-item active\" v-for=\"(item, index) in formDynamic.spec\" :key=\"index\">\r\n <div class=\"move-icon\">\r\n <span class=\"iconfont icondrag2\"></span>\r\n </div>\r\n <i class=\"del el-icon-error\" @click=\"handleRemoveRole(index)\"></i>\r\n <div class=\"specifications-item-box\">\r\n <div class=\"lineBox\"></div>\r\n <div class=\"specifications-item-name mb18\">\r\n <el-input\r\n v-model=\"item.value\"\r\n placeholder=\"规格名称\"\r\n class=\"specifications-item-name-input\"\r\n maxlength=\"30\"\r\n show-word-limit\r\n ></el-input>\r\n </div>\r\n <div class=\"rulesBox ml30\">\r\n <draggable class=\"item\" :list=\"item.detail\" handle=\".drag\">\r\n <div v-for=\"(j, indexn) in item.detail\" :key=\"indexn\" class=\"mr10 spec drag\">\r\n <i class=\"el-icon-error\" @click=\"handleRemove2(item.detail, indexn)\"></i>\r\n\r\n <el-input\r\n style=\"width: 120px\"\r\n v-model=\"item.detail[indexn]\"\r\n placeholder=\"规格值\"\r\n maxlength=\"30\"\r\n >\r\n <template slot=\"prefix\">\r\n <span class=\"iconfont icondrag2\"></span>\r\n </template>\r\n </el-input>\r\n </div>\r\n <el-popover\r\n :ref=\"'popoverRef_' + index\"\r\n placement=\"\"\r\n width=\"210\"\r\n trigger=\"click\"\r\n @after-enter=\"handleShowPop(index)\"\r\n >\r\n <el-input\r\n :ref=\"'inputRef_' + index\"\r\n placeholder=\"请输入规格值\"\r\n v-model=\"item.detail.attrsVal\"\r\n @keyup.enter.native=\"createAttr(item.detail.attrsVal, index)\"\r\n @blur=\"createAttr(item.detail.attrsVal, index)\"\r\n maxlength=\"30\"\r\n show-word-limit\r\n >\r\n </el-input>\r\n <div class=\"addfont\" slot=\"reference\" type=\"text\" v-db-click>添加规格值</div>\r\n </el-popover>\r\n </draggable>\r\n </div>\r\n </div>\r\n </div>\r\n </draggable>\r\n <el-button v-if=\"formDynamic.spec.length < 4\" v-db-click @click=\"handleAddRole()\">添加新规格</el-button>\r\n </div>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n </el-form>\r\n <span slot=\"footer\" class=\"dialog-footer\">\r\n <el-button v-db-click @click=\"onClose\">取消</el-button>\r\n <el-button type=\"primary\" :loading=\"modal_loading\" v-db-click @click=\"handleSubmit('formDynamic')\"\r\n >确定</el-button\r\n >\r\n </span>\r\n </el-dialog>\r\n</template>\r\n\r\n<script>\r\nimport { mapState } from 'vuex';\r\nimport { ruleAddApi, ruleInfoApi } from '@/api/product';\r\nimport vuedraggable from 'vuedraggable';\r\nexport default {\r\n name: 'addAttr',\r\n components: {\r\n draggable: vuedraggable,\r\n },\r\n data() {\r\n return {\r\n spinShow: false,\r\n modal_loading: false,\r\n grid: {\r\n xl: 3,\r\n lg: 3,\r\n md: 12,\r\n sm: 24,\r\n xs: 24,\r\n },\r\n modal: false,\r\n index: 1,\r\n rules: {\r\n rule_name: [{ required: true, message: '请输入规格名称', trigger: 'blur' }],\r\n },\r\n formDynamic: {\r\n rule_name: '',\r\n spec: [],\r\n },\r\n attrsName: '',\r\n attrsVal: '',\r\n formDynamicNameData: [],\r\n isBtn: false,\r\n formDynamicName: [],\r\n results: [],\r\n result: [],\r\n ids: 0,\r\n };\r\n },\r\n computed: {},\r\n methods: {\r\n handleShowPop(index) {\r\n this.$refs['inputRef_' + index][0].focus();\r\n },\r\n // 删除规格\r\n handleRemoveRole(index) {\r\n this.formDynamic.spec.splice(index, 1);\r\n if (!this.formDynamic.spec.length) {\r\n this.formDynamic.spec = [];\r\n }\r\n },\r\n handleAddRole() {\r\n let data = {\r\n value: this.formDynamic.attrsName,\r\n detail: [],\r\n };\r\n this.formDynamic.spec.push(data);\r\n },\r\n onCancel() {\r\n this.ids = 0;\r\n this.clear();\r\n },\r\n onClose() {\r\n this.ids = 0;\r\n this.clear();\r\n this.modal = false;\r\n },\r\n // 添加按钮\r\n addBtn() {\r\n this.isBtn = true;\r\n },\r\n // 详情\r\n getIofo(row) {\r\n this.spinShow = true;\r\n this.ids = row.id;\r\n ruleInfoApi(row.id)\r\n .then((res) => {\r\n this.formDynamic = res.data.info;\r\n this.spinShow = false;\r\n })\r\n .catch((res) => {\r\n this.spinShow = false;\r\n this.$message.error(res.msg);\r\n });\r\n },\r\n // 提交\r\n handleSubmit(name) {\r\n this.$refs[name].validate((valid) => {\r\n if (valid) {\r\n if (this.formDynamic.spec.length === 0) {\r\n return this.$message.warning('请至少添加一条商品规格!');\r\n }\r\n this.modal_loading = true;\r\n setTimeout(() => {\r\n ruleAddApi(this.formDynamic, this.ids)\r\n .then((res) => {\r\n this.$message.success(res.msg);\r\n setTimeout(() => {\r\n this.modal = false;\r\n this.modal_loading = false;\r\n }, 500);\r\n setTimeout(() => {\r\n this.$emit('getList');\r\n this.clear();\r\n }, 600);\r\n })\r\n .catch((res) => {\r\n this.modal_loading = false;\r\n this.$message.error(res.msg);\r\n });\r\n }, 1200);\r\n } else {\r\n return false;\r\n }\r\n });\r\n },\r\n clear() {\r\n this.$refs['formDynamic'].resetFields();\r\n this.formDynamic.spec = [];\r\n this.isBtn = false;\r\n this.attrsName = '';\r\n this.attrsVal = '';\r\n this.ids = 0;\r\n },\r\n // 取消\r\n offAttrName() {\r\n this.isBtn = false;\r\n },\r\n // 删除\r\n handleRemove(index) {\r\n this.formDynamic.spec.splice(index, 1);\r\n },\r\n // 删除属性\r\n handleRemove2(item, index) {\r\n item.splice(index, 1);\r\n },\r\n // 添加规则名称\r\n createAttrName() {\r\n if (this.attrsName && this.attrsVal) {\r\n let data = {\r\n value: this.attrsName,\r\n detail: [this.attrsVal],\r\n };\r\n this.formDynamic.spec.push(data);\r\n var hash = {};\r\n this.formDynamic.spec = this.formDynamic.spec.reduce(function (item, next) {\r\n /* eslint-disable */\r\n hash[next.value] ? '' : (hash[next.value] = true && item.push(next));\r\n return item;\r\n }, []);\r\n this.attrsName = '';\r\n this.attrsVal = '';\r\n this.isBtn = false;\r\n } else {\r\n this.$message.warning('请添加规格名称或规格值');\r\n }\r\n },\r\n // 添加属性\r\n createAttr(num, idx) {\r\n if (num) {\r\n this.formDynamic.spec[idx].detail.push(num);\r\n var hash = {};\r\n this.formDynamic.spec[idx].detail = this.formDynamic.spec[idx].detail.reduce(function (item, next) {\r\n /* eslint-disable */\r\n hash[next] ? '' : (hash[next] = true && item.push(next));\r\n return item;\r\n }, []);\r\n } else {\r\n this.$message.warning('请添加属性');\r\n }\r\n },\r\n },\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.rulesBox {\r\n display: flex;\r\n align-items: center;\r\n flex-wrap: wrap;\r\n}\r\n.attrFrom {\r\n ::v-deep .ivu-form-item {\r\n margin-bottom: 0px !important;\r\n }\r\n}\r\n.noForm {\r\n margin-left: 12px;\r\n}\r\n.add {\r\n margin-left: 132px;\r\n}\r\n.drag {\r\n cursor: move;\r\n}\r\n.spec {\r\n display: block;\r\n margin: 5px 0;\r\n position: relative;\r\n .el-icon-error {\r\n position: absolute;\r\n display: none;\r\n right: -3px;\r\n top: -3px;\r\n z-index: 9;\r\n }\r\n}\r\n.spec:hover {\r\n .el-icon-error {\r\n display: block;\r\n z-index: 999;\r\n cursor: pointer;\r\n }\r\n}\r\n.move-icon {\r\n width: 30px;\r\n cursor: move;\r\n margin-right: 10px;\r\n}\r\n.move-icon .icondrag2 {\r\n font-size: 26px;\r\n color: #bbb;\r\n}\r\n.specifications {\r\n .specifications-item:hover {\r\n background-color: var(--prev-bg-menu-hover-ba-color);\r\n }\r\n .specifications-item:hover .del {\r\n display: block;\r\n }\r\n .specifications-item:last-child {\r\n margin-bottom: 14px;\r\n }\r\n .specifications-item {\r\n position: relative;\r\n display: flex;\r\n align-items: center;\r\n padding: 20px 15px;\r\n transition: all 0.1s;\r\n background-color: #fafafa;\r\n margin-bottom: 10px;\r\n border-radius: 4px;\r\n .del {\r\n display: none;\r\n position: absolute;\r\n right: 15px;\r\n top: 15px;\r\n font-size: 22px;\r\n color: var(--prev-color-primary);\r\n cursor: pointer;\r\n }\r\n .specifications-item-box {\r\n position: relative;\r\n .lineBox {\r\n position: absolute;\r\n left: 13px;\r\n top: 24px;\r\n width: 30px;\r\n height: 45px;\r\n border-radius: 6px;\r\n border-left: 1px solid #dcdfe6;\r\n border-bottom: 1px solid #dcdfe6;\r\n }\r\n .specifications-item-name-input {\r\n width: 200px;\r\n }\r\n }\r\n }\r\n .rulesBox {\r\n display: flex;\r\n flex-wrap: wrap;\r\n align-items: center;\r\n .item {\r\n display: flex;\r\n flex-wrap: wrap;\r\n }\r\n .addfont {\r\n margin-top: 5px;\r\n }\r\n ::v-deep .el-popover {\r\n border: none;\r\n box-shadow: none;\r\n padding: 0;\r\n margin-top: 5px;\r\n line-height: 1.5;\r\n }\r\n }\r\n .addfont {\r\n display: inline-block;\r\n font-size: 12px;\r\n font-weight: 400;\r\n color: var(--prev-color-primary);\r\n margin-left: 14px;\r\n cursor: pointer;\r\n }\r\n}\r\n</style>\r\n"]}]}