textTitle-edit.vue 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. <template>
  2. <div class="pc-edit">
  3. <!-- 内容 -->
  4. <div class="content-wrap" v-show="diyStore.editTab == 'content'">
  5. <div class="edit-attr-item-wrap">
  6. <h3 class="mb-[10px]">风格设置</h3>
  7. <el-form label-width="90px" class="px-[10px]">
  8. <el-form-item label="风格选择" class="flex">
  9. <span class="text-primary flex-1 cursor-pointer" @click="showStyle">风格{{ diyStore.editComponent.styleType }}</span>
  10. <el-icon @click="showStyle" class="cursor-pointer">
  11. <ArrowRight />
  12. </el-icon>
  13. </el-form-item>
  14. </el-form>
  15. </div>
  16. <div class="edit-attr-item-wrap">
  17. <h3 class="mb-[10px]">标题内容</h3>
  18. <el-form label-width="90px" class="px-[10px]">
  19. <el-form-item label="标题名称" class="flex">
  20. <el-input v-model="diyStore.editComponent.title" placeholder="请输入标题内容" />
  21. </el-form-item>
  22. <el-form-item label="链接地址">
  23. <WebLinkInput v-model="diyStore.editComponent.titleUrl" placeholder="请输入或选择链接" />
  24. <!-- <el-input v-model="diyStore.editComponent.titleUrl" placeholder="请输入链接地址" /> -->
  25. </el-form-item>
  26. <el-form-item label="对齐方式" class="flex" v-if="diyStore.editComponent.styleType == 1">
  27. <el-radio-group v-model="diyStore.editComponent.titleAlign">
  28. <el-radio :value="'left'">居左</el-radio>
  29. <el-radio :value="'center'">居中</el-radio>
  30. </el-radio-group>
  31. </el-form-item>
  32. </el-form>
  33. </div>
  34. <div
  35. class="edit-attr-item-wrap"
  36. v-if="
  37. diyStore.editComponent.styleType == 10 ||
  38. diyStore.editComponent.styleType == 11 ||
  39. diyStore.editComponent.styleType == 12 ||
  40. diyStore.editComponent.styleType == 14
  41. "
  42. >
  43. <h3 class="mb-[10px]">副标题内容</h3>
  44. <el-form label-width="90px" class="px-[10px]">
  45. <el-form-item label="副标题名称" class="flex">
  46. <el-input v-model="diyStore.editComponent.subtitle" placeholder="请输入副标题内容" />
  47. </el-form-item>
  48. </el-form>
  49. </div>
  50. <div class="edit-attr-item-wrap" v-if="diyStore.editComponent.styleType == 12 || diyStore.editComponent.styleType == 14">
  51. <h3 class="mb-[10px]">"更多"按钮</h3>
  52. <el-form label-width="90px" class="px-[10px]">
  53. <el-form-item label="按钮文字" class="flex">
  54. <el-input v-model="diyStore.editComponent.more" placeholder="请输入按钮文字" />
  55. </el-form-item>
  56. <el-form-item label="链接地址" class="flex">
  57. <el-input v-model="diyStore.editComponent.moreUrl" placeholder="请输入链接地址" />
  58. </el-form-item>
  59. </el-form>
  60. </div>
  61. </div>
  62. <!-- 样式 -->
  63. <div class="style-wrap" v-show="diyStore.editTab == 'style'">
  64. <div class="edit-attr-item-wrap">
  65. <h3 class="mb-[10px]">标题样式</h3>
  66. <el-form label-width="80px" class="px-[10px]">
  67. <el-form-item label="文字大小">
  68. <el-slider size="small" v-model="diyStore.editComponent.titleSize" show-input :min="1" :max="50" />
  69. </el-form-item>
  70. <el-form-item label="文字加粗">
  71. <el-radio-group size="small" v-model="diyStore.editComponent.titleWeight" fill="#409eff">
  72. <el-radio-button label="加粗" :value="'bold'" />
  73. <el-radio-button label="不加粗" :value="'normal'" />
  74. </el-radio-group>
  75. </el-form-item>
  76. <el-form-item label="文字颜色">
  77. <span class="mr-[10px]">{{ diyStore.editComponent.titleColor }}</span>
  78. <el-color-picker class="mr-[10px]" v-model="diyStore.editComponent.titleColor" />
  79. <el-button @click="diyStore.editComponent.titleColor = '#101828'" size="small">重置</el-button>
  80. </el-form-item>
  81. </el-form>
  82. </div>
  83. <div
  84. class="edit-attr-item-wrap"
  85. v-if="
  86. diyStore.editComponent.styleType == 10 ||
  87. diyStore.editComponent.styleType == 11 ||
  88. diyStore.editComponent.styleType == 12 ||
  89. diyStore.editComponent.styleType == 14
  90. "
  91. >
  92. <h3 class="mb-[10px]">副标题样式</h3>
  93. <el-form label-width="80px" class="px-[10px]">
  94. <el-form-item label="文字大小">
  95. <el-slider size="small" v-model="diyStore.editComponent.subtitleSize" show-input :min="1" :max="50" />
  96. </el-form-item>
  97. <el-form-item label="文字颜色">
  98. <span class="mr-[10px]">{{ diyStore.editComponent.subtitleColor }}</span>
  99. <el-color-picker class="mr-[10px]" v-model="diyStore.editComponent.subtitleColor" />
  100. <el-button @click="diyStore.editComponent.subtitleColor = '#b7bcd2'" size="small">重置</el-button>
  101. </el-form-item>
  102. </el-form>
  103. </div>
  104. <div class="edit-attr-item-wrap" v-if="diyStore.editComponent.styleType == 12 || diyStore.editComponent.styleType == 14">
  105. <h3 class="mb-[10px]">"更多"按钮样式</h3>
  106. <el-form label-width="80px" class="px-[10px]">
  107. <el-form-item label="文字大小">
  108. <el-slider size="small" v-model="diyStore.editComponent.moreSize" show-input :min="1" :max="50" />
  109. </el-form-item>
  110. <el-form-item label="文字颜色">
  111. <span class="mr-[10px]">{{ diyStore.editComponent.moreColor }}</span>
  112. <el-color-picker class="mr-[10px]" v-model="diyStore.editComponent.moreColor" />
  113. <el-button @click="diyStore.editComponent.moreColor = '#b7bcd2'" size="small">重置</el-button>
  114. </el-form-item>
  115. <el-form-item label="是否显示">
  116. <el-switch v-model="diyStore.editComponent.moreShow" />
  117. </el-form-item>
  118. </el-form>
  119. </div>
  120. <!-- 组件样式 -->
  121. <slot name="style"></slot>
  122. </div>
  123. <!-- 风格弹窗 -->
  124. <el-dialog v-model="showDialog" title="风格选择">
  125. <div class="data-bos">
  126. <template v-for="(item, index) in styleList" :key="index">
  127. <div
  128. :class="{ 'border-primary': styleId == item.id }"
  129. @click="changeTitleStyle(item)"
  130. class="data-list flex items-center justify-center overflow-hidden w-[200px] h-[100px] mr-[12px] mb-[12px] cursor-pointer border bg-[#eee]"
  131. >
  132. <img :src="item.img" />
  133. </div>
  134. </template>
  135. </div>
  136. <template #footer>
  137. <span class="dialog-footer">
  138. <el-button @click="showDialog = false">取消</el-button>
  139. <el-button type="primary" @click="confirmTitleStyle">确认</el-button>
  140. </span>
  141. </template>
  142. </el-dialog>
  143. </div>
  144. </template>
  145. <script setup name="Index" lang="ts">
  146. import usePcdiyStore from '@/store/modules/pcdiy';
  147. import titlle1 from '@/assets/images/pcdiy/titlle1.png';
  148. import titlle2 from '@/assets/images/pcdiy/titlle2.png';
  149. import titlle3 from '@/assets/images/pcdiy/titlle3.png';
  150. import titlle4 from '@/assets/images/pcdiy/titlle4.png';
  151. import titlle5 from '@/assets/images/pcdiy/titlle5.png';
  152. import titlle6 from '@/assets/images/pcdiy/titlle6.png';
  153. import titlle7 from '@/assets/images/pcdiy/titlle7.png';
  154. import titlle8 from '@/assets/images/pcdiy/titlle8.png';
  155. import titlle9 from '@/assets/images/pcdiy/titlle9.png';
  156. import titlle10 from '@/assets/images/pcdiy/titlle10.png';
  157. import titlle11 from '@/assets/images/pcdiy/titlle11.png';
  158. import titlle12 from '@/assets/images/pcdiy/titlle12.png';
  159. import titlle13 from '@/assets/images/pcdiy/titlle13.png';
  160. import titlle14 from '@/assets/images/pcdiy/titlle14.png';
  161. import titlle15 from '@/assets/images/pcdiy/titlle15.png';
  162. const diyStore = usePcdiyStore();
  163. const styleId = ref<any>(1);
  164. const showDialog = ref(false);
  165. const styleList = [
  166. {
  167. img: titlle1,
  168. id: 1
  169. },
  170. {
  171. img: titlle2,
  172. id: 2
  173. },
  174. {
  175. img: titlle3,
  176. id: 3
  177. },
  178. {
  179. img: titlle4,
  180. id: 4
  181. },
  182. {
  183. img: titlle5,
  184. id: 5
  185. },
  186. {
  187. img: titlle6,
  188. id: 6
  189. },
  190. {
  191. img: titlle7,
  192. id: 7
  193. },
  194. {
  195. img: titlle8,
  196. id: 8
  197. },
  198. {
  199. img: titlle9,
  200. id: 9
  201. },
  202. {
  203. img: titlle10,
  204. id: 10
  205. },
  206. {
  207. img: titlle11,
  208. id: 11
  209. },
  210. {
  211. img: titlle12,
  212. id: 12
  213. },
  214. {
  215. img: titlle13,
  216. id: 13
  217. },
  218. {
  219. img: titlle14,
  220. id: 14
  221. },
  222. {
  223. img: titlle15,
  224. id: 15
  225. }
  226. ];
  227. //打开弹窗
  228. const showStyle = () => {
  229. showDialog.value = true;
  230. styleId.value = diyStore.editComponent.styleType;
  231. };
  232. //选择弹窗
  233. const changeTitleStyle = (item: any) => {
  234. styleId.value = item.id;
  235. };
  236. //确定弹窗
  237. const confirmTitleStyle = () => {
  238. diyStore.editComponent.styleType = styleId.value;
  239. showDialog.value = false;
  240. };
  241. </script>
  242. <style lang="scss" scoped>
  243. .pc-edit {
  244. .edit-attr-item-wrap {
  245. border-top: 2px solid var(--el-color-info-light-8);
  246. padding-top: 20px;
  247. &:first-of-type {
  248. border-top: none;
  249. padding-top: 0;
  250. }
  251. }
  252. .data-bos {
  253. display: flex;
  254. flex-wrap: wrap;
  255. gap: 0 12px;
  256. .data-list {
  257. background-color: #f9fafb;
  258. border: 1px solid #e5e7eb;
  259. &.border-primary {
  260. border-color: var(--el-color-primary);
  261. }
  262. img {
  263. width: 100%;
  264. }
  265. }
  266. }
  267. :deep(.el-form-item__label) {
  268. font-weight: 400;
  269. }
  270. }
  271. </style>