setting.vue 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846
  1. <template>
  2. <app-layout>
  3. <view class="setting">
  4. <image class="set-image" src="../image/set-bg.png"></image>
  5. <view class="head">
  6. <image class="logo" :src="detail.setting.mall_logo_pic" @click="setLogo"></image>
  7. <view class="name">
  8. <view @click="() => {model = true;modelType = 0;name = detail.name}">
  9. <view class="name-text dir-left-wrap main-center cross-center">
  10. <view>{{detail.name}}</view>
  11. <image src="../image/edit.png"></image>
  12. </view>
  13. </view>
  14. </view>
  15. </view>
  16. <view class="switch switch-open dir-top-nowrap" >
  17. <view class="switch-item dir-left-nowrap cross-center">
  18. <image src="../image/is-open.png"></image>
  19. <view class="border dir-left-nowrap main-between" @click="openStatus">
  20. <view class="app-text">营业状态</view>
  21. <view class=" cross-center">
  22. <view class="switch-view" :class="{'app-switch-view':detail.setting.is_open == 1 }">
  23. <view class="click" :class="{'app-switch': detail.setting.is_open == 1 }"></view>
  24. </view>
  25. </view>
  26. </view>
  27. </view>
  28. <view v-if="detail.setting.is_open == 1" class="switch-item no-margin dir-left-nowrap cross-center">
  29. <view @click="toggleOpenType(1)" class="radio-text dir-left-nowrap cross-center">
  30. <app-radio @click.stop="toggleOpenType(1)" :height="100" :width="100" :value="detail.setting.open_type == 1" :item="detail.setting" theme="admin" type="round"></app-radio>
  31. <view class="app-text" :class="{'admin': detail.setting.open_type == 1 }">全天24小时</view>
  32. </view>
  33. <view @click="toggleOpenType(2)" class="dir-left-nowrap cross-center">
  34. <app-radio @click.stop="toggleOpenType(2)" :height="100" :width="100" :value="detail.setting.open_type == 2" :item="detail.setting" theme="admin" type="round"></app-radio>
  35. <view class="app-text" :class="{'admin': detail.setting.open_type == 2 }">自定义营业时间</view>
  36. </view>
  37. </view>
  38. <view @click="chooseWeek" v-if="detail.setting.is_open == 1 && detail.setting.open_type == 2" class="switch-open-item main-between cross-center">
  39. <view class="app-text-switch app-text">选择日期</view>
  40. <view class="app-icon-text dir-left-nowrap cross-center">
  41. <view v-if="detail.setting.week_list.length == 0">未填写</view>
  42. <view v-else class="t-omit switch-open-text">
  43. <text v-for="(item,index) in detail.setting.week_list" :key="index">
  44. <text v-if="item == '1'">周一</text>
  45. <text v-if="item == '2'">周二</text>
  46. <text v-if="item == '3'">周三</text>
  47. <text v-if="item == '4'">周四</text>
  48. <text v-if="item == '5'">周五</text>
  49. <text v-if="item == '6'">周六</text>
  50. <text v-if="item == '7'">周日</text>
  51. <text v-if="index != detail.setting.week_list.length - 1">、</text>
  52. </text>
  53. </view>
  54. <image class="app-icon" src="../image/arrow-right.png"></image>
  55. </view>
  56. </view>
  57. <view @click="toSettingTime" v-if="detail.setting.is_open == 1 && detail.setting.open_type == 2" class="switch-open-item main-between cross-center">
  58. <view class="app-text-switch app-text">选择时间段</view>
  59. <view class="app-icon-text dir-left-nowrap cross-center">
  60. <view v-if="detail.setting.time_list.length == 0">未填写</view>
  61. <view v-else class="t-omit switch-open-text">
  62. <text v-for="(item,index) in detail.setting.time_list" :key="index">
  63. {{item.value[0]}}-{{item.value[1]}}<text v-if="index != detail.setting.time_list.length - 1">、</text>
  64. </text>
  65. </view>
  66. <image class="app-icon" src="../image/arrow-right.png"></image>
  67. </view>
  68. </view>
  69. <view @click="openAuto" v-if="detail.setting.is_open == 2" class="switch-open-item no-border main-between cross-center">
  70. <view class="app-text-switch app-text">设置自动开业时间</view>
  71. <view class="app-icon-text dir-left-nowrap cross-center">
  72. <view v-if="detail.setting.is_auto_open == 1">不设置</view>
  73. <view v-else>
  74. {{detail.setting.auto_open_time}}
  75. </view>
  76. <image class="app-icon" src="../image/arrow-right.png"></image>
  77. </view>
  78. </view>
  79. </view>
  80. <view class="switch dir-top-nowrap" >
  81. <view class="switch-item dir-left-nowrap cross-center" v-if="sms">
  82. <image src="../image/msg.png"></image>
  83. <view class="dir-left-nowrap main-between" :class="{'border':mail }" @click="setSmsStatus">
  84. <view class="app-text">短信通知</view>
  85. <view class=" cross-center">
  86. <view class="switch-view" :class="{'app-switch-view':sms.status == 1 }">
  87. <view class="click" :class="{'app-switch': sms.status == 1 }"></view>
  88. </view>
  89. </view>
  90. </view>
  91. </view>
  92. <view class="switch-item dir-left-nowrap cross-center" v-if="mail">
  93. <image src="../image/mail.png"></image>
  94. <view class="dir-left-nowrap main-between" @click="setMailStatus">
  95. <view class="app-text">邮件通知</view>
  96. <view class="cross-center" >
  97. <view class="switch-view" :class="{'app-switch-view':mail.status == 1 }">
  98. <view class="click" :class="{'app-switch':mail.status == 1 }"></view>
  99. </view>
  100. </view>
  101. </view>
  102. </view>
  103. </view>
  104. <view class="switch-time dir-top-nowrap">
  105. <view class="switch-time-item dir-left-nowrap cross-center">
  106. <image src="../image/delete-time.png"></image>
  107. <view class="switch-time-content dir-left-nowrap main-between border" @click="() => {model = true;modelType = 1;over_time = detail.setting.over_time}">
  108. <view class="app-text-switch app-text">删除未支付订单限时</view>
  109. <view class="app-icon-text dir-left-nowrap cross-center" >
  110. <view>{{detail.setting.over_time}}分</view>
  111. <image class="app-icon" src="../image/arrow-right.png"></image>
  112. </view>
  113. </view>
  114. </view>
  115. <view class="switch-time-item dir-left-nowrap cross-center">
  116. <image src="../image/auto.png"></image>
  117. <view class="switch-time-content dir-left-nowrap main-between border" @click="() => {model = true;modelType = 2;delivery_time = detail.setting.delivery_time}">
  118. <view class="app-text-switch app-text">自动确认收货时间</view>
  119. <view class="app-icon-text dir-left-nowrap cross-center">
  120. <view>{{detail.setting.delivery_time}}天</view>
  121. <image class="app-icon" src="../image/arrow-right.png"></image>
  122. </view>
  123. </view>
  124. </view>
  125. <view class="switch-time-item dir-left-nowrap cross-center">
  126. <image src="../image/refund.png"></image>
  127. <view class="switch-time-content dir-left-nowrap main-between" @click="() => {model = true;modelType = 3;after_sale_time = detail.setting.after_sale_time}">
  128. <view class="app-text-switch app-text">可申请售后时间</view>
  129. <view class="app-icon-text dir-left-nowrap cross-center" >
  130. <view>{{detail.setting.after_sale_time}}天</view>
  131. <image class="app-icon" src="../image/arrow-right.png"></image>
  132. </view>
  133. </view>
  134. </view>
  135. </view>
  136. <view class="online-payment">
  137. <view @click="() => {model = true;modelType = 4;payment_type = detail.setting.payment_type}">
  138. <view class="online-payment-content dir-left-nowrap cross-center">
  139. <image class="app-image" src="../image/pay.png"></image>
  140. <view class="dir-top-nowrap">
  141. <view class="payment-text">支付方式</view>
  142. <view class="payment-method-text">
  143. {{online_pay ? '线上支付':''}}
  144. {{online_pay && huodao ? '/':''}}
  145. {{huodao ? '货到付款':''}}
  146. {{huodao && balance || online_pay && balance ? '/':''}}
  147. {{balance ? '余额支付':''}}
  148. </view>
  149. </view>
  150. <image class="app-icon" src="../image/arrow-right.png"></image>
  151. </view>
  152. </view>
  153. </view>
  154. <view class="shipping-return">
  155. <view class="shipping-return-item dir-left-nowrap cross-center" >
  156. <image class="item-image" src="../image/send.png"></image>
  157. <view class="item-view dir-left-nowrap border main-between" @click="sendTypeHandler">
  158. <view class="app-text">发货方式</view>
  159. <view class="right dir-left-nowrap cross-center">
  160. <view>{{detail.setting.send_type.length > 0 ? '已选择': '未选择'}}</view>
  161. <image src="../image/arrow-right.png"></image>
  162. </view>
  163. </view>
  164. </view>
  165. <view class="shipping-return-item dir-left-nowrap cross-center">
  166. <image class="item-image" src="../image/address.png"></image>
  167. <view class="item-view dir-left-nowrap main-between" @click="jumpGo">
  168. <view class="app-text">退货地址</view>
  169. <view class="right dir-left-nowrap cross-center">
  170. <view>已填写</view>
  171. <image src="../image/arrow-right.png"></image>
  172. </view>
  173. </view>
  174. </view>
  175. </view>
  176. <view class="integral">
  177. <view class="integral-item dir-left-nowrap cross-center">
  178. <image src="../image/intergral.png"></image>
  179. <view class="text-content dir-left-nowrap main-between" @click="model = true;modelType = 6;member_integral = detail.setting.member_integral">
  180. <view class="app-text">积分抵扣</view>
  181. <view class="right dir-left-nowrap cross-center">
  182. <view>{{detail.setting.member_integral}}积分抵扣1元</view>
  183. <image src="../image/arrow-right.png"></image>
  184. </view>
  185. </view>
  186. </view>
  187. <view class="integral-item dir-left-nowrap cross-center">
  188. <image src="../image/rule.png"></image>
  189. <view class="text-content dir-left-nowrap main-between" @click="model = true;modelType = 7;member_integral_rule = detail.setting.member_integral_rule">
  190. <view class="app-text">积分使用规则</view>
  191. <view class="right dir-left-nowrap cross-center">
  192. <view>{{detail.setting.member_integral_rule.length > 0 ? '已填写' : '未填写'}}</view>
  193. <image src="../image/arrow-right.png"></image>
  194. </view>
  195. </view>
  196. </view>
  197. </view>
  198. </view>
  199. <view class="safe-area-inset-bottom">
  200. <view class="u-bottom-height"></view>
  201. </view>
  202. <view class="safe-area-inset-bottom u-bottom-fixed">
  203. <view :class="['main-between','bottom-tab']">
  204. <view class="box-grow-1 tab-item" @click="toRedirect('/pages/app_admin/index/index')">
  205. <image class="tab-icon" src="./../image/index.png"></image>
  206. <view>首页</view>
  207. </view>
  208. <view class="box-grow-1 tab-item" @click="toRedirect('/pages/app_admin/order/order')">
  209. <image class="tab-icon" src="./../image/order.png"></image>
  210. <view>订单</view>
  211. </view>
  212. <view class="box-grow-1 tab-item" @click="toRedirect('/pages/app_admin/goods/goods')">
  213. <image class="tab-icon" src="./../image/goods.png"></image>
  214. <view>商品</view>
  215. </view>
  216. <view class="box-grow-1 tab-item active">
  217. <image class="tab-icon" src="./../image/setting-active.png"></image>
  218. <view>设置</view>
  219. </view>
  220. </view>
  221. </view>
  222. <view @touchmove.stop.prevent="" class="model" v-if="model">
  223. <view class="content">
  224. <view class="title">{{modelType === 0 ? '修改商城名称' : modelType === 1 ? '删除未支付订单限时': modelType === 2 ? '自动确认收货时间': modelType === 3 ? '可申请售后天数': modelType === 4 ? '支付方式': modelType === 5 ? '发货方式': modelType === 6 ? '积分抵扣':modelType === 7 ? '积分使用规则': modelType === 8 ? '选择日期': modelType === 9 ? '设置自动开业': ''}}</view>
  225. <view class="content-text">
  226. <template v-if="modelType === 0">
  227. <input placeholder="最多输入15个字符" type="text" class="name" maxlength="15" v-model="name">
  228. </template>
  229. <template v-if="modelType === 1">
  230. <view class="dir-left-nowrap main-center intergral-change">
  231. <view class="intergral-input">
  232. <input type="text" class="input" v-model="over_time">
  233. </view>
  234. <view>分钟</view>
  235. </view>
  236. </template>
  237. <template v-if="modelType === 2">
  238. <view class="dir-left-nowrap main-center intergral-change">
  239. <view class="intergral-input">
  240. <input type="text" class="input" v-model="delivery_time">
  241. </view>
  242. <view>天</view>
  243. </view>
  244. </template>
  245. <template v-if="modelType === 3">
  246. <view class="dir-left-nowrap main-center intergral-change">
  247. <view class="intergral-input">
  248. <input type="text" class="input" v-model="after_sale_time">
  249. </view>
  250. <view>天</view>
  251. </view>
  252. </template>
  253. <template v-if="modelType === 4">
  254. <view class="dir-top dir-top-nowrap main-center pay-change">
  255. <view class="pay-view" :class="{'app-active': online_pay}" @click="setPay('online_pay')">
  256. <view class="left dir-left-nowrap cross-center main-between" >
  257. <view class="dir-left-nowrap cross-center">
  258. <image src="../image/online-payment.png"></image>
  259. <view>线上支付</view>
  260. </view>
  261. <image v-if="online_pay" class="active" src="../image/check.png"></image>
  262. </view>
  263. </view>
  264. <view class="pay-view" :class="{'app-active': balance}" @click="setPay('balance')">
  265. <view class="left dir-left-nowrap cross-center main-between" >
  266. <view class="dir-left-nowrap cross-center">
  267. <image src="../image/balance.png"></image>
  268. <view>余额支付</view>
  269. </view>
  270. <image v-if="balance" class="active" src="../image/check.png"></image>
  271. </view>
  272. </view>
  273. <view class="pay-view" :class="{'app-active': huodao}" @click="setPay('huodao')">
  274. <view class="left dir-left-nowrap cross-center main-between">
  275. <view class="dir-left-nowrap cross-center">
  276. <image src="../image/cash-on-delivery.png"></image>
  277. <view>货到付款</view>
  278. </view>
  279. <image v-if="huodao" class="active" src="../image/check.png"></image>
  280. </view>
  281. </view>
  282. </view>
  283. </template>
  284. <template v-if="modelType === 5">
  285. <view class="dir-top dir-top-nowrap main-center pay-change">
  286. <view class="pay-view" :class="{'app-active': express}" @click="setSend('express')">
  287. <view class="left dir-left-nowrap cross-center main-between" >
  288. <view class="dir-left-nowrap cross-center">
  289. <image src="../image/express-delivery.png"></image>
  290. <view>快递配送</view>
  291. </view>
  292. <image v-if="express" class="active" src="../image/check.png"></image>
  293. </view>
  294. </view>
  295. <view class="pay-view" :class="{'app-active': offline}" @click="setSend('offline')">
  296. <view class="left dir-left-nowrap cross-center main-between" >
  297. <view class="dir-left-nowrap cross-center">
  298. <image src="../image/self-lifting.png"></image>
  299. <view>到店自提</view>
  300. </view>
  301. <image v-if="offline" class="active" src="../image/check.png"></image>
  302. </view>
  303. </view>
  304. <view class="pay-view" :class="{'app-active': city}" @click="setSend('city')">
  305. <view class="left dir-left-nowrap cross-center main-between">
  306. <view class="dir-left-nowrap cross-center">
  307. <image src="../image/same-city.png"></image>
  308. <view>同城配送</view>
  309. </view>
  310. <image v-if="city" class="active" src="../image/check.png"></image>
  311. </view>
  312. </view>
  313. </view>
  314. </template>
  315. <template v-if="modelType === 6">
  316. <view class="i-modal-body free">
  317. <view class="main-center intergral-change">
  318. <input type="number" class="intergral-input" v-model="member_integral">
  319. <view >积分抵扣1元</view>
  320. </view>
  321. </view>
  322. </template>
  323. <template v-if="modelType === 7">
  324. <view class="main-center cross-center textarea-area">
  325. <textarea class="textarea" v-model="member_integral_rule"></textarea>
  326. </view>
  327. </template>
  328. <template v-if="modelType === 8">
  329. <view class="flex-wrap main-between cross-center time-area date-area">
  330. <view v-for="item in date" :key="item.value" @click="chooseDate(item)" :class="[`${item.check?`admin-m-text admin admin-m-border`:'time-area-item'}`]" class="dialog-choose-item">{{item.label}}</view>
  331. </view>
  332. </template>
  333. <template v-if="modelType === 9">
  334. <view class="main-center cross-center time-area">
  335. <view @click="chooseAuto = 1" :class="[`${chooseAuto==1?`admin-m-text admin admin-m-border`:'time-area-item'}`]" class="dialog-choose-item">不设置</view>
  336. <view @click="chooseAuto = 2" :class="[`${chooseAuto==2?`admin-m-text admin admin-m-border`:'time-area-item'}`]" class="dialog-choose-item">设置</view>
  337. </view>
  338. <view class="choose-time" v-if="chooseAuto==2">
  339. <view class="time-title">设置自动开业时间</view>
  340. <view class="year-1">年</view>
  341. <view class="month-1">月</view>
  342. <view class="day-1">日</view>
  343. <view class="year-2">时</view>
  344. <view class="month-2">分</view>
  345. <view class="day-2">秒</view>
  346. <picker-view :value="dateVal" :indicator-style="indicatorStyle" class="picker-view" @change="dateChange">
  347. <picker-view-column>
  348. <view v-for="(item,idx) in years" :key="item"
  349. :class="[`${dateVal[0] == idx ?`admin-m-text admin`: ''}`]"
  350. :style="{ color: dateVal[0] == idx + 1 || dateVal[0] == idx - 1 ? '#999999' : dateVal[0] == idx + 2 || dateVal[0] == idx - 2 ? '#cdcdcd': '' , lineHeight: lineHeight}">{{item}}</view>
  351. </picker-view-column>
  352. <picker-view-column>
  353. <view v-for="(item,idx) in months" :key="item"
  354. :class="[`${dateVal[1] == idx ?`admin-m-text admin`: ''}`]"
  355. :style="{ color: dateVal[1] == idx + 1 || dateVal[1] == idx - 1 ? '#999999' : dateVal[1] == idx + 2 || dateVal[1] == idx - 2 ? '#cdcdcd': '' , lineHeight: lineHeight}">{{item}}</view>
  356. </picker-view-column>
  357. <picker-view-column>
  358. <view v-for="(item,idx) in days" :key="item"
  359. :class="[`${dateVal[2] == idx ?`admin-m-text admin`: ''}`]"
  360. :style="{ color: dateVal[2] == idx + 1 || dateVal[2] == idx - 1 ? '#999999' : dateVal[2] == idx + 2 || dateVal[2] == idx - 2 ? '#cdcdcd': '' , lineHeight: lineHeight}">{{item}}</view>
  361. </picker-view-column>
  362. </picker-view>
  363. <picker-view :value="timeVal" :indicator-style="indicatorStyle" class="picker-view" @change="timeChange">
  364. <picker-view-column>
  365. <view v-for="(item,idx) in hour" :key="item"
  366. :class="[`${timeVal[0] == idx ?`admin-m-text admin`: ''}`]"
  367. :style="{ color: timeVal[0] == idx + 1 || timeVal[0] == idx - 1 ? '#999999' : timeVal[0] == idx + 2 || timeVal[0] == idx - 2 ? '#cdcdcd': '' , lineHeight: lineHeight}">{{item}}</view>
  368. </picker-view-column>
  369. <picker-view-column>
  370. <view v-for="(item,idx) in minutes" :key="item"
  371. :class="[`${timeVal[1] == idx ?`admin-m-text admin`: ''}`]"
  372. :style="{ color: timeVal[1] == idx + 1 || timeVal[1] == idx - 1 ? '#999999' : timeVal[1] == idx + 2 || timeVal[1] == idx - 2 ? '#cdcdcd': '' , lineHeight: lineHeight}">{{item}}</view>
  373. </picker-view-column>
  374. <picker-view-column>
  375. <view v-for="(item,idx) in minutes" :key="item"
  376. :class="[`${timeVal[2] == idx ?`admin-m-text admin`: ''}`]"
  377. :style="{ color: timeVal[2] == idx + 1 || timeVal[2] == idx - 1 ? '#999999' : timeVal[2] == idx + 2 || timeVal[2] == idx - 2 ? '#cdcdcd': '' , lineHeight: lineHeight}">{{item}}</view>
  378. </picker-view-column>
  379. </picker-view>
  380. </view>
  381. </template>
  382. </view>
  383. <view class="buttons dir-left-nowrap cross-center">
  384. <view class="but cancel">
  385. <view @click="() => {cancel();}">取消</view>
  386. </view>
  387. <view class="line"></view>
  388. <view class="but confirm">
  389. <view @click="confirm">确认</view>
  390. </view>
  391. </view>
  392. </view>
  393. </view>
  394. </app-layout>
  395. </template>
  396. <script>
  397. import appRadio from '../../../components/basic-component/app-radio/app-radio.vue';
  398. const date = new Date()
  399. const years = []
  400. const months = []
  401. const bigDays = []
  402. const smallDays = []
  403. const secDays = []
  404. const otherDays = []
  405. for (let i = date.getFullYear(); i <= date.getFullYear() + 10; i++) {
  406. years.push(i)
  407. }
  408. for (let i = 1; i <= 12; i++) {
  409. months.push(i)
  410. }
  411. for (let i = 1; i <= 31; i++) {
  412. bigDays.push(i)
  413. }
  414. for (let i = 1; i <= 30; i++) {
  415. smallDays.push(i)
  416. }
  417. for (let i = 1; i <= 28; i++) {
  418. secDays.push(i)
  419. }
  420. for (let i = 1; i <= 29; i++) {
  421. otherDays.push(i)
  422. }
  423. export default {
  424. name: "setting",
  425. data() {
  426. return {
  427. lineHeight: '72rpx',
  428. indicatorStyle: '',
  429. detail: {
  430. setting: {
  431. delivery_time: '0',
  432. after_sale_time: '0',
  433. over_time: '0',
  434. member_integral: '0'
  435. }
  436. },
  437. mail: {},
  438. sms: {},
  439. model: false,
  440. modelType: 0,
  441. name: '',
  442. over_time: '',
  443. delivery_time: '',
  444. after_sale_time: '',
  445. payment_type: [],
  446. online_pay: false,
  447. balance: false,
  448. huodao: false,
  449. send_type: [],
  450. express: false,
  451. offline: false,
  452. city: false,
  453. member_integral: '',
  454. member_integral_rule: '',
  455. chooseAuto: 1,
  456. date: [
  457. {label: '周一', value: '1', check: false},
  458. {label: '周二', value: '2', check: false},
  459. {label: '周三', value: '3', check: false},
  460. {label: '周四', value: '4', check: false},
  461. {label: '周五', value: '5', check: false},
  462. {label: '周六', value: '6', check: false},
  463. {label: '周日', value: '7', check: false},
  464. ],
  465. hour: [],
  466. minutes: [],
  467. dateVal: [0,0,0],
  468. timeVal: [0,0,0],
  469. chooseAuto: 1,
  470. years: years,
  471. months: months,
  472. days: bigDays,
  473. bigDays: bigDays,
  474. smallDays: smallDays,
  475. secDays: secDays,
  476. otherDays: otherDays,
  477. }
  478. },
  479. onLoad() {
  480. for(let i = 0;i < 60;i++) {
  481. if(i < 10) {
  482. i = '0' + i
  483. }
  484. if(i < 24) {
  485. this.hour.push(i)
  486. }
  487. this.minutes.push(i)
  488. }
  489. this.indicatorStyle = 'height: 36px;font-size:14px;';
  490. let screenWidth = uni.getSystemInfoSync().windowWidth;
  491. let p = 375 / screenWidth;
  492. this.lineHeight = 72*p + 'rpx';
  493. var myDate = new Date();
  494. let year = myDate.getFullYear();
  495. let month = myDate.getMonth() + 1;
  496. if (month >= 1 && month <= 9) {
  497. month = "0" + month;
  498. }
  499. let day = myDate.getDate();
  500. for(let i in this.years) {
  501. if (year == this.years[i]) {
  502. this.dateVal[0] = +i
  503. }
  504. }
  505. for(let i in this.months) {
  506. if (month == this.months[i]) {
  507. this.dateVal[1] = +i
  508. }
  509. }
  510. if(month == 2) {
  511. if(year%4 == 0 && year %400 != 0) {
  512. this.days = this.otherDays
  513. }else {
  514. this.days = this.secDays
  515. }
  516. }else if((month < 8 && month%2 == 1) || (month > 7 && month%2 == 0)) {
  517. this.days = this.bigDays
  518. }else {
  519. this.days = this.smallDays
  520. }
  521. for(let i in this.days) {
  522. if (day == this.days[i]) {
  523. this.dateVal[2] = +i
  524. }
  525. }
  526. },
  527. onShow() {
  528. this.$showLoading({
  529. type: 'global',
  530. text: '加载中...'
  531. });
  532. this.getList();
  533. },
  534. methods: {
  535. getList() {
  536. this.$request({
  537. url: this.$api.app_admin.setting
  538. }).then(response => {
  539. if (response.code === 0) {
  540. this.detail = response.data.detail;
  541. this.$hideLoading();
  542. let { over_time, delivery_time, after_sale_time, payment_type, member_integral,member_integral_rule, is_auto_open } = this.detail.setting;
  543. this.over_time = over_time;
  544. this.delivery_time = delivery_time;
  545. this.after_sale_time = after_sale_time;
  546. this.payment_type = payment_type;
  547. this.member_integral = member_integral;
  548. this.member_integral_rule = member_integral_rule;
  549. this.chooseAuto = is_auto_open;
  550. let sendType = this.detail.setting.send_type;
  551. for (let i = 0; i < sendType.length; i++) {
  552. if (sendType[i] === 'express') {
  553. this.express = true;
  554. } else if(sendType[i] === 'offline') {
  555. this.offline = true;
  556. } else if (sendType[i] === 'city') {
  557. this.city = true;
  558. }
  559. }
  560. this.name = this.detail.name;
  561. this.mail = response.data.mail;
  562. this.sms = response.data.sms;
  563. for (let i = 0; i < payment_type.length; i++) {
  564. if (payment_type[i] === 'online_pay') {
  565. this.online_pay = true;
  566. } else if (payment_type[i] === 'huodao') {
  567. this.huodao = true;
  568. } else if (payment_type[i] === 'balance') {
  569. this.balance = true;
  570. }
  571. }
  572. for(let date of this.date) {
  573. for(let item of this.detail.setting.week_list) {
  574. if(date.value == item) {
  575. date.check = true;
  576. }
  577. }
  578. }
  579. }
  580. })
  581. },
  582. dateChange: function(e) {
  583. const val = e.detail.value;
  584. this.dateVal = e.detail.value;
  585. let years = this.years;
  586. let year = this.years[val[0]];
  587. let month = this.months[val[1]];
  588. if(month == 2) {
  589. if(year%4 == 0 && year %400 != 0) {
  590. this.days = this.otherDays
  591. }else {
  592. this.days = this.secDays
  593. }
  594. }else if((month < 8 && month%2 == 1) || (month > 7 && month%2 == 0)) {
  595. this.days = this.bigDays
  596. }else {
  597. this.days = this.smallDays
  598. }
  599. },
  600. timeChange: function(e) {
  601. this.timeVal = e.detail.value;
  602. },
  603. openAuto() {
  604. this.chooseAuto = this.detail.setting.is_auto_open;
  605. if(this.chooseAuto == 2 && this.detail.setting.auto_open_time.length > 0) {
  606. for(let i in this.years) {
  607. if (this.detail.setting.auto_open_time.substring(0, 4) == this.years[i]) {
  608. this.dateVal[0] = +i
  609. }
  610. }
  611. for(let i in this.months) {
  612. if (this.detail.setting.auto_open_time.substring(5, 7) == this.months[i]) {
  613. this.dateVal[1] = +i
  614. }
  615. }
  616. let startMonth = +this.dateVal[1] + 1;
  617. if(startMonth == 2) {
  618. if(year%4 == 0 && year %400 != 0) {
  619. this.days = this.otherDays
  620. }else {
  621. this.days = this.secDays
  622. }
  623. }else if((startMonth < 8 && startMonth%2 == 1) || (startMonth > 7 && startMonth%2 == 0)) {
  624. this.days = this.bigDays
  625. }else {
  626. this.days = this.smallDays
  627. }
  628. for(let i in this.days) {
  629. if (this.detail.setting.auto_open_time.substring(8, 10) == this.days[i]) {
  630. this.dateVal[2] = +i
  631. }
  632. }
  633. let auto_open_time = this.detail.setting.auto_open_time.substring(11);
  634. this.timeVal = auto_open_time.split(':').map(Number);
  635. }
  636. this.model = true;
  637. this.modelType = 9;
  638. },
  639. chooseWeek() {
  640. for(let date of this.date) {
  641. date.check = false;
  642. for(let item of this.detail.setting.week_list) {
  643. if(date.value == item) {
  644. date.check = true;
  645. }
  646. }
  647. }
  648. this.model = true;
  649. this.modelType = 8;
  650. },
  651. toggleOpenType(e) {
  652. if(e == 1) {
  653. this.detail.setting.open_type = e;
  654. this.submit();
  655. }else {
  656. if(this.detail.setting.week_list.length > 0) {
  657. this.detail.setting.open_type = e;
  658. this.submit();
  659. }else {
  660. this.model = true;
  661. this.modelType = 8;
  662. }
  663. }
  664. },
  665. toSettingTime() {
  666. uni.navigateTo({
  667. url: `/pages/app_admin/open-time/open-time?time_list=${JSON.stringify(this.detail.setting.time_list)}`
  668. })
  669. },
  670. chooseDate(e) {
  671. e.check = !e.check;
  672. },
  673. toRedirect(url) {
  674. uni.redirectTo({
  675. url: url
  676. })
  677. },
  678. setLogo() {
  679. let _this = this;
  680. uni.chooseImage({
  681. count: 1,
  682. sizeType: ['original', 'compressed'],
  683. sourceType: ['album', 'camera'],
  684. success(res) {
  685. uni.uploadFile({
  686. url: _this.$api.upload.file,
  687. filePath: res.tempFilePaths[0],
  688. name: 'file',
  689. success(response) {
  690. _this.detail.setting.mall_logo_pic = JSON.parse(response.data).data.url;
  691. _this.submit();
  692. }
  693. });
  694. }
  695. });
  696. },
  697. setSmsStatus() {
  698. if (this.sms.status === 1) {
  699. this.sms.status = 0;
  700. } else {
  701. this.sms.status = 1;
  702. }
  703. this.submit();
  704. },
  705. setMailStatus() {
  706. if (this.mail.status === '1') {
  707. this.mail.status = '0';
  708. } else {
  709. this.mail.status = '1';
  710. }
  711. this.submit();
  712. },
  713. openStatus() {
  714. if (this.detail.setting.is_open === 1) {
  715. this.detail.setting.is_open = 2;
  716. } else {
  717. this.detail.setting.is_open = 1;
  718. }
  719. this.submit();
  720. },
  721. setPay(data) {
  722. this[data] = !this[data];
  723. if (this.balance === false && this.huodao === false) {
  724. this.online_pay = true;
  725. }
  726. },
  727. setSend(data) {
  728. this[data] = !this[data];
  729. if (this.offline === false && this.city === false) {
  730. this.express = true;
  731. }
  732. },
  733. sendTypeHandler() {
  734. this.model = true;
  735. this.modelType = 5;
  736. },
  737. jumpGo() {
  738. this.$jump({
  739. open_type: 'navigate',
  740. url: `/pages/address/address?manual_btn_bg=admin&is_hide_default_btn=1&is_refund_address=1`
  741. });
  742. },
  743. submit() {
  744. let mail = this.mail ? this.mail.status : null;
  745. let sms = this.sms? this.sms.status : null;
  746. let data = {
  747. name: this.detail.name,
  748. setting: JSON.stringify(this.detail.setting),
  749. mail: mail,
  750. sms: sms
  751. };
  752. this.$request({
  753. url: this.$api.app_admin.setting,
  754. method: 'post',
  755. data: data,
  756. }).then(response => {
  757. if (response.code === 0) {
  758. this.model = false;
  759. }
  760. })
  761. },
  762. cancel() {
  763. this.model = false;
  764. },
  765. confirm() {
  766. if(this.modelType == 8) {
  767. let pass = false;
  768. for(let item of this.date) {
  769. if(item.check) {
  770. pass = item.check;
  771. }
  772. }
  773. if(!pass) {
  774. uni.showToast({
  775. title: '请选择营业时间',
  776. icon: 'none',
  777. duration: 1000
  778. });
  779. return false;
  780. }else {
  781. this.detail.setting.open_type = 2
  782. }
  783. }
  784. this.detail.name = this.name;
  785. this.detail.setting.over_time = this.over_time;
  786. this.detail.setting.delivery_time = this.delivery_time;
  787. this.detail.setting.after_sale_time = this.after_sale_time;
  788. this.detail.setting.payment_type = [];
  789. this.detail.setting.member_integral = this.member_integral;
  790. this.detail.setting.member_integral_rule = this.member_integral_rule;
  791. if (this.online_pay === true) {
  792. this.detail.setting.payment_type.push('online_pay');
  793. }
  794. if (this.huodao === true) {
  795. this.detail.setting.payment_type.push('huodao');
  796. }
  797. if (this.balance === true) {
  798. this.detail.setting.payment_type.push('balance');
  799. }
  800. this.detail.setting.send_type = [];
  801. if (this.offline === true) {
  802. this.detail.setting.send_type.push('offline');
  803. }
  804. if (this.express === true) {
  805. this.detail.setting.send_type.push('express');
  806. }
  807. if (this.city === true) {
  808. this.detail.setting.send_type.push('city');
  809. }
  810. this.detail.setting.week_list = [];
  811. for(let item of this.date) {
  812. if(item.check) {
  813. this.detail.setting.week_list.push(item.value)
  814. }
  815. }
  816. this.detail.setting.is_auto_open = this.chooseAuto;
  817. if(this.detail.setting.is_auto_open == 2) {
  818. let month = this.months[this.dateVal[1]];
  819. let day = this.days[this.dateVal[2]];
  820. if(month < 10) {
  821. month = '0' + month
  822. }
  823. if(day < 10) {
  824. day = '0' + day
  825. }
  826. this.detail.setting.auto_open_time = this.years[this.dateVal[0]] + '-' + month + '-' + day
  827. this.detail.setting.auto_open_time += ' ' + this.hour[this.timeVal[0]] + ':' + this.minutes[this.timeVal[1]] + ':' + this.minutes[this.timeVal[2]]
  828. }
  829. this.submit();
  830. },
  831. },
  832. components: {
  833. appRadio
  834. }
  835. }
  836. </script>
  837. <style scoped lang="scss">
  838. @import "./setting.scss";
  839. </style>