1508b1f2448e5f11709a7f3d3ab3164b.json 17 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=style&index=0&id=bde54da2&lang=scss&scoped=true","dependencies":[{"path":"D:\\front\\item\\zyAdmin\\src\\pages\\product\\productAttr\\addAttr.vue","mtime":1761614939049},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\css-loader\\index.js","mtime":1761614929364},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\vue-loader\\lib\\loaders\\stylePostLoader.js","mtime":1761614937403},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\postcss-loader\\src\\index.js","mtime":1761614935133},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\sass-loader\\dist\\cjs.js","mtime":1761614936391},{"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:DQoucnVsZXNCb3ggew0KICBkaXNwbGF5OiBmbGV4Ow0KICBhbGlnbi1pdGVtczogY2VudGVyOw0KICBmbGV4LXdyYXA6IHdyYXA7DQp9DQouYXR0ckZyb20gew0KICA6OnYtZGVlcCAuaXZ1LWZvcm0taXRlbSB7DQogICAgbWFyZ2luLWJvdHRvbTogMHB4ICFpbXBvcnRhbnQ7DQogIH0NCn0NCi5ub0Zvcm0gew0KICBtYXJnaW4tbGVmdDogMTJweDsNCn0NCi5hZGQgew0KICBtYXJnaW4tbGVmdDogMTMycHg7DQp9DQouZHJhZyB7DQogIGN1cnNvcjogbW92ZTsNCn0NCi5zcGVjIHsNCiAgZGlzcGxheTogYmxvY2s7DQogIG1hcmdpbjogNXB4IDA7DQogIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgLmVsLWljb24tZXJyb3Igew0KICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICBkaXNwbGF5OiBub25lOw0KICAgIHJpZ2h0OiAtM3B4Ow0KICAgIHRvcDogLTNweDsNCiAgICB6LWluZGV4OiA5Ow0KICB9DQp9DQouc3BlYzpob3ZlciB7DQogIC5lbC1pY29uLWVycm9yIHsNCiAgICBkaXNwbGF5OiBibG9jazsNCiAgICB6LWluZGV4OiA5OTk7DQogICAgY3Vyc29yOiBwb2ludGVyOw0KICB9DQp9DQoubW92ZS1pY29uIHsNCiAgd2lkdGg6IDMwcHg7DQogIGN1cnNvcjogbW92ZTsNCiAgbWFyZ2luLXJpZ2h0OiAxMHB4Ow0KfQ0KLm1vdmUtaWNvbiAuaWNvbmRyYWcyIHsNCiAgZm9udC1zaXplOiAyNnB4Ow0KICBjb2xvcjogI2JiYjsNCn0NCi5zcGVjaWZpY2F0aW9ucyB7DQogIC5zcGVjaWZpY2F0aW9ucy1pdGVtOmhvdmVyIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wcmV2LWJnLW1lbnUtaG92ZXItYmEtY29sb3IpOw0KICB9DQogIC5zcGVjaWZpY2F0aW9ucy1pdGVtOmhvdmVyIC5kZWwgew0KICAgIGRpc3BsYXk6IGJsb2NrOw0KICB9DQogIC5zcGVjaWZpY2F0aW9ucy1pdGVtOmxhc3QtY2hpbGQgew0KICAgIG1hcmdpbi1ib3R0b206IDE0cHg7DQogIH0NCiAgLnNwZWNpZmljYXRpb25zLWl0ZW0gew0KICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAgcGFkZGluZzogMjBweCAxNXB4Ow0KICAgIHRyYW5zaXRpb246IGFsbCAwLjFzOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmYWZhZmE7DQogICAgbWFyZ2luLWJvdHRvbTogMTBweDsNCiAgICBib3JkZXItcmFkaXVzOiA0cHg7DQogICAgLmRlbCB7DQogICAgICBkaXNwbGF5OiBub25lOw0KICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgcmlnaHQ6IDE1cHg7DQogICAgICB0b3A6IDE1cHg7DQogICAgICBmb250LXNpemU6IDIycHg7DQogICAgICBjb2xvcjogdmFyKC0tcHJldi1jb2xvci1wcmltYXJ5KTsNCiAgICAgIGN1cnNvcjogcG9pbnRlcjsNCiAgICB9DQogICAgLnNwZWNpZmljYXRpb25zLWl0ZW0tYm94IHsNCiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICAgIC5saW5lQm94IHsNCiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgICBsZWZ0OiAxM3B4Ow0KICAgICAgICB0b3A6IDI0cHg7DQogICAgICAgIHdpZHRoOiAzMHB4Ow0KICAgICAgICBoZWlnaHQ6IDQ1cHg7DQogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsNCiAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjZGNkZmU2Ow0KICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RjZGZlNjsNCiAgICAgIH0NCiAgICAgIC5zcGVjaWZpY2F0aW9ucy1pdGVtLW5hbWUtaW5wdXQgew0KICAgICAgICB3aWR0aDogMjAwcHg7DQogICAgICB9DQogICAgfQ0KICB9DQogIC5ydWxlc0JveCB7DQogICAgZGlzcGxheTogZmxleDsNCiAgICBmbGV4LXdyYXA6IHdyYXA7DQogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICAuaXRlbSB7DQogICAgICBkaXNwbGF5OiBmbGV4Ow0KICAgICAgZmxleC13cmFwOiB3cmFwOw0KICAgIH0NCiAgICAuYWRkZm9udCB7DQogICAgICBtYXJnaW4tdG9wOiA1cHg7DQogICAgfQ0KICAgIDo6di1kZWVwIC5lbC1wb3BvdmVyIHsNCiAgICAgIGJvcmRlcjogbm9uZTsNCiAgICAgIGJveC1zaGFkb3c6IG5vbmU7DQogICAgICBwYWRkaW5nOiAwOw0KICAgICAgbWFyZ2luLXRvcDogNXB4Ow0KICAgICAgbGluZS1oZWlnaHQ6IDEuNTsNCiAgICB9DQogIH0NCiAgLmFkZGZvbnQgew0KICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgICBmb250LXNpemU6IDEycHg7DQogICAgZm9udC13ZWlnaHQ6IDQwMDsNCiAgICBjb2xvcjogdmFyKC0tcHJldi1jb2xvci1wcmltYXJ5KTsNCiAgICBtYXJnaW4tbGVmdDogMTRweDsNCiAgICBjdXJzb3I6IHBvaW50ZXI7DQogIH0NCn0NCg=="},{"version":3,"sources":["addAttr.vue"],"names":[],"mappings":";AA8QA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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"]}]}