com-attr-select.php 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <style>
  2. .com-attr-dialog {
  3. min-width: 700px;
  4. }
  5. .com-attr-dialog .block {
  6. padding: 12px;
  7. }
  8. </style>
  9. <template id="com-attr-select">
  10. <div class="com-attr-select">
  11. <el-dialog append-to-body title="规格选择" :visible.sync="visible" :close-on-click-modal="false"
  12. custom-class="com-attr-dialog">
  13. <div>
  14. <template v-for="(attr_group, index) in attrGroups">
  15. <div class="block">{{attr_group.attr_group_name}}</div>
  16. <el-radio-group v-model="attrGroups[index].active">
  17. <el-radio class="block" v-for="(attr, key) in attr_group.attr_list" :key="attr.attr_id"
  18. :label="key">{{attr.attr_name}}
  19. </el-radio>
  20. </el-radio-group>
  21. </template>
  22. </div>
  23. <div style="margin-top: 24px;">
  24. <el-row>
  25. <el-button type="primary" size="small" style="float: right" @click="confirm">选择</el-button>
  26. </el-row>
  27. </div>
  28. </el-dialog>
  29. <div @click="click" style="display: inline-block">
  30. <slot></slot>
  31. </div>
  32. </div>
  33. </template>
  34. <script>
  35. Vue.component('com-attr-select', {
  36. template: '#com-attr-select',
  37. props: {
  38. attrGroups: Array // 规格组信息
  39. },
  40. data() {
  41. return {
  42. visible: false,
  43. result: []
  44. };
  45. },
  46. created() {
  47. this.defaultData();
  48. },
  49. watch: {
  50. attrGroups() {
  51. this.defaultData();
  52. }
  53. },
  54. methods: {
  55. click() {
  56. this.visible = !this.visible;
  57. },
  58. confirm() {
  59. this.getResult();
  60. this.visible = !this.visible;
  61. },
  62. defaultData() {
  63. if (this.attrGroups && this.attrGroups.length === 1 && this.attrGroups[0].attr_list.length === 1) {
  64. this.attrGroups[0].active = 0;
  65. this.getResult();
  66. }
  67. },
  68. getResult() {
  69. let result = [];
  70. for (let i in this.attrGroups) {
  71. let temp = this.attrGroups[i];
  72. result[i] = {
  73. attr_group_name: temp.attr_group_name,
  74. attr_name: temp.attr_list[temp.active].attr_name,
  75. }
  76. }
  77. this.$emit('input', result);
  78. }
  79. }
  80. });
  81. </script>