order_component.html 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. <template id="diy-order">
  2. <div class="component-wrap" :class="{curr: curr == 'diy-order'}" @click="selectComponent()" :style="{padding: value.order.margin.join(' ')}">
  3. <div class="order-wrap" :style="radius">
  4. <div class="head-wrap">
  5. <div class="title">我的订单</div>
  6. <span class="see">全部订单</span>
  7. <i class="iconfont iconyoujiantou"></i>
  8. </div>
  9. <div class="status-wrap">
  10. <div class="item-wrap">
  11. <div class="icon-block">
  12. <iconfont :icon="value.order.icon.waitPay.icon" v-if="value.order.icon.waitPay" :value="value.order.icon.waitPay.style ? handleIconStyle(value.order.icon.waitPay.style) : null"></iconfont>
  13. </div>
  14. <div class="title">待付款</div>
  15. </div>
  16. <div class="item-wrap">
  17. <div class="icon-block">
  18. <iconfont :icon="value.order.icon.waitSend.icon" v-if="value.order.icon.waitSend" :value="value.order.icon.waitSend.style ? handleIconStyle(value.order.icon.waitSend.style) : null"></iconfont>
  19. </div>
  20. <div class="title">待发货</div>
  21. </div>
  22. <div class="item-wrap">
  23. <div class="icon-block">
  24. <iconfont :icon="value.order.icon.waitConfirm.icon" v-if="value.order.icon.waitConfirm" :value="value.order.icon.waitConfirm.style ? handleIconStyle(value.order.icon.waitConfirm.style) : null"></iconfont>
  25. </div>
  26. <div class="title">待收货</div>
  27. </div>
  28. <div class="item-wrap">
  29. <div class="icon-block">
  30. <iconfont :icon="value.order.icon.waitRate.icon" v-if="value.order.icon.waitRate" :value="value.order.icon.waitRate.style ? handleIconStyle(value.order.icon.waitRate.style) : null"></iconfont>
  31. </div>
  32. <div class="title">待评价</div>
  33. </div>
  34. <div class="item-wrap">
  35. <div class="icon-block">
  36. <iconfont :icon="value.order.icon.refunding.icon" v-if="value.order.icon.refunding" :value="value.order.icon.refunding.style ? handleIconStyle(value.order.icon.refunding.style) : null"></iconfont>
  37. </div>
  38. <div class="title">售后</div>
  39. </div>
  40. </div>
  41. </div>
  42. <div class="selected-area"></div>
  43. </div>
  44. </template>
  45. <!-- 组件样式 -->
  46. <style>
  47. .order-wrap {
  48. background: #fff;
  49. }
  50. .order-wrap .status-wrap {
  51. display: flex;
  52. padding: 15px 0;
  53. align-items: center;
  54. justify-content: center;
  55. color: #333;
  56. }
  57. .order-wrap .item-wrap {
  58. flex: 1;
  59. text-align: center;
  60. }
  61. .order-wrap .item-wrap .icon-block {
  62. width: 30px;
  63. height: 30px;
  64. font-size: 30px;
  65. margin: 2px auto;
  66. }
  67. .order-wrap .item-wrap .title {
  68. font-size: 13px;
  69. }
  70. .order-wrap .head-wrap {
  71. display: flex;
  72. padding: 15px 0;
  73. margin: 0 15px;
  74. align-items: center;
  75. border-bottom: 1px solid #eeeeee;
  76. }
  77. .order-wrap .head-wrap .title {
  78. flex: 1;
  79. width: 0;
  80. font-size: 17px;
  81. font-weight: bold;
  82. }
  83. .order-wrap .head-wrap .see {
  84. line-height: 1;
  85. color: #999;
  86. }
  87. </style>
  88. <script>
  89. Vue.component('diy-order', {
  90. props: {
  91. curr: {
  92. type: String,
  93. default: ''
  94. },
  95. value: {
  96. type: Object,
  97. default: function () {
  98. return {};
  99. }
  100. }
  101. },
  102. data: function () {
  103. return {
  104. count: 0
  105. }
  106. },
  107. created(){
  108. },
  109. computed: {
  110. radius(){
  111. return {
  112. 'border-top-left-radius': this.value.order.radius[0],
  113. 'border-top-right-radius': this.value.order.radius[0],
  114. 'border-bottom-left-radius': this.value.order.radius[1],
  115. 'border-bottom-right-radius': this.value.order.radius[1],
  116. }
  117. }
  118. },
  119. methods: {
  120. selectComponent(){
  121. this.$emit('click', 'diy-order');
  122. },
  123. handleIconStyle(data){
  124. if (this.value.order.icon_style == 0) {
  125. if (this.value.member_info.background_type == 'system') {
  126. data.iconColor = [ colourBlend(systemColor.main_color, '#ffffff', 0.5), systemColor.main_color ];
  127. } else {
  128. data.iconColor = [ this.value.member_info.background[1], this.value.member_info.background[2] ];
  129. }
  130. }
  131. return data;
  132. }
  133. },
  134. template: '#diy-order'
  135. })
  136. </script>
  137. <!--会员信息编辑组件-->
  138. <template id="diy-order-edit">
  139. <div class="component-wrpp diy-order-edit">
  140. <div class="edit-title">
  141. <span>订单信息</span>
  142. <div class="tab-wrap">
  143. <span class="tab-item" :class="{active: tab == 'content'}" @click="tab = 'content'">内容</span>
  144. <span class="tab-item" :class="{active: tab == 'style'}" @click="tab = 'style'">样式</span>
  145. </div>
  146. </div>
  147. <div class="layui-form">
  148. <div v-show="tab == 'content'">
  149. <div class="layui-form-item">
  150. <label class="layui-form-label sm">图标风格</label>
  151. <div class="layui-input-block">
  152. <div class="layui-unselect layui-form-radio"
  153. :class="{'layui-form-radioed': value.order.icon_style == index}"
  154. v-for="(item, index) in styleList" :key="index"
  155. @click="switchIconStyle(index)"
  156. >
  157. <i class="layui-anim layui-icon"></i>
  158. <div>{{ item.title }}</div>
  159. </div>
  160. </div>
  161. </div>
  162. </div>
  163. <div v-show="tab == 'style'">
  164. <div class="group-title">
  165. <span>组件样式</span>
  166. </div>
  167. <div class="layui-form-item">
  168. <label class="layui-form-label sm">上边距</label>
  169. <div class="layui-input-block slide-wrap">
  170. <div class="top"></div>
  171. </div>
  172. </div>
  173. <div class="layui-form-item">
  174. <label class="layui-form-label sm">下边距</label>
  175. <div class="layui-input-block slide-wrap">
  176. <div class="bottom"></div>
  177. </div>
  178. </div>
  179. <div class="layui-form-item">
  180. <label class="layui-form-label sm">左右边距</label>
  181. <div class="layui-input-block slide-wrap">
  182. <div class="about"></div>
  183. </div>
  184. </div>
  185. <div class="layui-form-item">
  186. <label class="layui-form-label sm">上圆角</label>
  187. <div class="layui-input-block slide-wrap">
  188. <div class="top-radius"></div>
  189. </div>
  190. </div>
  191. <div class="layui-form-item">
  192. <label class="layui-form-label sm">下圆角</label>
  193. <div class="layui-input-block slide-wrap">
  194. <div class="bottom-radius"></div>
  195. </div>
  196. </div>
  197. </div>
  198. </div>
  199. </div>
  200. </template>
  201. <style>
  202. .diy-order-edit {
  203. }
  204. </style>
  205. <script>
  206. Vue.component('diy-order-edit', {
  207. props: {
  208. value: {
  209. type: Object,
  210. default: function () {
  211. return {};
  212. }
  213. }
  214. },
  215. data: function () {
  216. return {
  217. tab: 'content',
  218. styleList: [
  219. { title: '风格一', data: {"waitPay":{"title":"待付款","icon":"icon-system-daifukuan2","style":{"bgRadius":0,"fontSize":65,"iconBgColor":[],"iconBgColorDeg":0,"iconBgImg":"","iconColor":["#FF7B1D","#FF1544"],"iconColorDeg":111}},"waitSend":{"title":"待发货","icon":"icon-system-daifahuo2","style":{"bgRadius":0,"fontSize":65,"iconBgColor":[],"iconBgColorDeg":0,"iconBgImg":"","iconColor":["#FF7B1D","#FF1544"],"iconColorDeg":111}},"waitConfirm":{"title":"待收货","icon":"icon-system-daishouhuo2","style":{"bgRadius":0,"fontSize":65,"iconBgColor":[],"iconBgColorDeg":0,"iconBgImg":"","iconColor":["#FF7B1D","#FF1544"],"iconColorDeg":111}},"waitRate":{"title":"待评价","icon":"icon-system-daipingjie2","style":{"bgRadius":0,"fontSize":65,"iconBgColor":[],"iconBgColorDeg":0,"iconBgImg":"","iconColor":["#FF7B1D","#FF1544"],"iconColorDeg":111}},"refunding":{"title":"售后","icon":"icon-system-shuhou2","style":{"bgRadius":0,"fontSize":65,"iconBgColor":[],"iconBgColorDeg":0,"iconBgImg":"","iconColor":["#FF7B1D","#FF1544"],"iconColorDeg":111}}} },
  220. { title: '风格二', data: {"waitPay":{"title":"待付款","icon":"icon-system-daifukuan","style":{"bgRadius":0,"fontSize":65,"iconBgColor":[],"iconBgColorDeg":0,"iconBgImg":"","iconColor":[],"iconColorDeg":0}},"waitSend":{"title":"待发货","icon":"icon-system-daifahuo","style":{"bgRadius":0,"fontSize":65,"iconBgColor":[],"iconBgColorDeg":0,"iconBgImg":"","iconColor":[],"iconColorDeg":0}},"waitConfirm":{"title":"待收货","icon":"icon-system-daishouhuo","style":{"bgRadius":0,"fontSize":65,"iconBgColor":[],"iconBgColorDeg":0,"iconBgImg":"","iconColor":[],"iconColorDeg":0}},"waitRate":{"title":"待评价","icon":"icon-system-daipingjie","style":{"bgRadius":0,"fontSize":65,"iconBgColor":[],"iconBgColorDeg":0,"iconBgImg":"","iconColor":[],"iconColorDeg":0}},"refunding":{"title":"售后","icon":"icon-system-shuhou","style":{"bgRadius":0,"fontSize":65,"iconBgColor":[],"iconBgColorDeg":0,"iconBgImg":"","iconColor":[],"iconColorDeg":0}}} }
  221. ]
  222. }
  223. },
  224. mounted(){
  225. var self = this;
  226. slider.render({
  227. elem: '.diy-order-edit .top',
  228. input: true,
  229. value: self.value.order.margin[0].split('px')[0],
  230. change: function (value) {
  231. self.value.order.margin[0] = value + 'px';
  232. self.updateMargin();
  233. }
  234. });
  235. slider.render({
  236. elem: '.diy-order-edit .bottom',
  237. input: true,
  238. value: self.value.order.margin[2].split('px')[0],
  239. change: function (value) {
  240. self.value.order.margin[2] = value + 'px';
  241. self.updateMargin();
  242. }
  243. });
  244. slider.render({
  245. elem: '.diy-order-edit .about',
  246. input: true,
  247. max: 20,
  248. value: self.value.order.margin[1].split('px')[0],
  249. change: function (value) {
  250. self.value.order.margin[1] = value + 'px';
  251. self.value.order.margin[3] = value + 'px';
  252. self.updateMargin();
  253. }
  254. });
  255. slider.render({
  256. elem: '.diy-order-edit .top-radius',
  257. input: true,
  258. value: self.value.order.radius[0].split('px')[0],
  259. max: 30,
  260. change: function (value) {
  261. self.value.order.radius[0] = value + 'px';
  262. self.updateRadius()
  263. }
  264. });
  265. slider.render({
  266. elem: '.diy-order-edit .bottom-radius',
  267. input: true,
  268. value: self.value.order.radius[1].split('px')[0],
  269. max: 30,
  270. change: function (value) {
  271. self.value.order.radius[1] = value + 'px';
  272. self.updateRadius()
  273. }
  274. });
  275. },
  276. methods: {
  277. updateMargin(){
  278. this.value.order.margin.push('')
  279. this.value.order.margin.pop()
  280. },
  281. updateRadius(){
  282. this.value.order.radius.push('')
  283. this.value.order.radius.pop()
  284. },
  285. switchIconStyle(index){
  286. this.value.order.icon_style = index;
  287. this.value.order.icon = {};
  288. var self = this;
  289. setTimeout(function () {
  290. self.value.order.icon = self.styleList[index].data;
  291. })
  292. }
  293. },
  294. template: '#diy-order-edit'
  295. })
  296. </script>