h5-add-wechat-button-config.vue 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <template>
  2. <div class="add-wechat-button-config">
  3. <div class="config-block">
  4. <h3>加微按钮配置</h3>
  5. <!-- 按钮样式选择 -->
  6. <el-form-item label="按钮样式">
  7. <el-radio-group v-model="localConfig.buttonStyle" @change="handleStyleChange">
  8. <el-radio label="text">文字</el-radio>
  9. <el-radio label="image">图片</el-radio>
  10. </el-radio-group>
  11. </el-form-item>
  12. <!-- 文字样式配置 -->
  13. <template v-if="localConfig.buttonStyle === 'text'">
  14. <el-form-item label="按钮文字">
  15. <el-input
  16. v-model="localConfig.buttonText"
  17. placeholder="请输入按钮文字"
  18. @change="handleConfigChange"
  19. />
  20. </el-form-item>
  21. <el-form-item label="按钮背景色">
  22. <el-color-picker
  23. v-model="localConfig.buttonColor"
  24. show-alpha
  25. @change="handleConfigChange"
  26. />
  27. </el-form-item>
  28. <el-form-item label="按钮文字色">
  29. <el-color-picker
  30. v-model="localConfig.buttonTextColor"
  31. show-alpha
  32. @change="handleConfigChange"
  33. />
  34. </el-form-item>
  35. </template>
  36. <!-- 图片样式配置 -->
  37. <template v-if="localConfig.buttonStyle === 'image'">
  38. <el-form-item label="按钮图片">
  39. <image-upload
  40. v-model="localConfig.buttonImage"
  41. :file-type='["png", "jpg", "jpeg", "gif"]'
  42. :limit="1"
  43. @change="handleConfigChange"
  44. />
  45. </el-form-item>
  46. </template>
  47. <!-- 其他设置 -->
  48. <el-divider></el-divider>
  49. <h4>其他设置</h4>
  50. <el-form-item label="获客助手跳转">
  51. <el-switch v-model="localConfig.enableGetCustomerAssistant" @change="handleConfigChange" />
  52. </el-form-item>
  53. <el-form-item label="跟随屏幕">
  54. <el-switch v-model="localConfig.followScreen" @change="handleConfigChange" />
  55. </el-form-item>
  56. <el-form-item label="默认尝试拉起微信">
  57. <el-switch v-model="localConfig.enableDefaultWechat" @change="handleConfigChange" />
  58. </el-form-item>
  59. <el-form-item label="启用小程序授权">
  60. <el-switch v-model="localConfig.enableMiniProgram" @change="handleConfigChange" />
  61. </el-form-item>
  62. </div>
  63. </div>
  64. </template>
  65. <script>
  66. export default {
  67. name: 'AddWechatButtonConfigComponent',
  68. props: {
  69. config: {
  70. type: Object,
  71. required: false,
  72. default: () => ({
  73. buttonStyle: 'text',
  74. buttonText: '提交',
  75. buttonColor: '#FF5A5A',
  76. buttonTextColor: '#ffffff',
  77. buttonImage: '',
  78. enableGetCustomerAssistant: true,
  79. followScreen: true,
  80. enableDefaultWechat: false,
  81. enableMiniProgram: false
  82. })
  83. }
  84. },
  85. data() {
  86. return {
  87. localConfig: JSON.parse(JSON.stringify(this.config))
  88. }
  89. },
  90. methods: {
  91. handleStyleChange() {
  92. // 切换样式时不清空图片,保持默认值
  93. this.handleConfigChange()
  94. },
  95. handleConfigChange() {
  96. this.$emit('update:config', JSON.parse(JSON.stringify(this.localConfig)))
  97. }
  98. },
  99. watch: {
  100. config: {
  101. handler(newVal) {
  102. this.localConfig = JSON.parse(JSON.stringify(newVal))
  103. },
  104. deep: true
  105. },
  106. 'localConfig.buttonImage'(newVal) {
  107. // 监听图片变化,实时更新父组件
  108. this.handleConfigChange()
  109. }
  110. }
  111. }
  112. </script>
  113. <style scoped>
  114. .add-wechat-button-config {
  115. width: 100%;
  116. font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", Arial, sans-serif;
  117. }
  118. .config-block {
  119. padding: 0px 15px;
  120. }
  121. h3 {
  122. font-weight: 500;
  123. margin: 15px 0 10px 0;
  124. color: #303133;
  125. font-size: 16px;
  126. border-bottom: 1px solid #EBEEF5;
  127. padding-bottom: 10px;
  128. }
  129. .el-form-item {
  130. margin-bottom: 16px;
  131. }
  132. </style>