setting.vue 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871
  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="toggleOpenType(1)" height="100" width="100" :value="detail.setting.open_type == 1" :item="detail.setting" :theme="theme" 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="toggleOpenType(2)" height="100" width="100" :value="detail.setting.open_type == 2" :item="detail.setting" :theme="theme" 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 == '0'">周日</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 border" @click="sendTypeHandler">
  158. <view class="app-text">发货方式</view>
  159. <view class="right dir-left-nowrap cross-center">
  160. <view v-if="detail.setting.send_type">{{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 border" @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 && 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="number" 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="number" 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="number" 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. theme: {
  428. background: '#446dfd',
  429. color: '#446dfd',
  430. },
  431. lineHeight: '72rpx',
  432. indicatorStyle: '',
  433. detail: {
  434. setting: {
  435. delivery_time: '0',
  436. after_sale_time: '0',
  437. over_time: '0',
  438. member_integral: '0'
  439. }
  440. },
  441. mail: {},
  442. sms: {},
  443. model: false,
  444. modelType: 0,
  445. name: '',
  446. over_time: '',
  447. delivery_time: '',
  448. after_sale_time: '',
  449. payment_type: [],
  450. online_pay: false,
  451. balance: false,
  452. huodao: false,
  453. send_type: [],
  454. express: false,
  455. offline: false,
  456. city: false,
  457. member_integral: '',
  458. member_integral_rule: '',
  459. chooseAuto: 1,
  460. date: [
  461. {label: '周一', value: '1', check: false},
  462. {label: '周二', value: '2', check: false},
  463. {label: '周三', value: '3', check: false},
  464. {label: '周四', value: '4', check: false},
  465. {label: '周五', value: '5', check: false},
  466. {label: '周六', value: '6', check: false},
  467. {label: '周日', value: '7', check: false},
  468. ],
  469. hour: [],
  470. minutes: [],
  471. dateVal: [0,0,0],
  472. timeVal: [0,0,0],
  473. chooseAuto: 1,
  474. years: years,
  475. months: months,
  476. days: bigDays,
  477. bigDays: bigDays,
  478. smallDays: smallDays,
  479. secDays: secDays,
  480. otherDays: otherDays,
  481. }
  482. },
  483. onLoad() { this.$commonLoad.onload();
  484. for(let i = 0;i < 60;i++) {
  485. if(i < 10) {
  486. i = '0' + i
  487. }
  488. if(i < 24) {
  489. this.hour.push(i)
  490. }
  491. this.minutes.push(i)
  492. }
  493. this.indicatorStyle = 'height: 36px;font-size:14px;';
  494. let screenWidth = uni.getSystemInfoSync().windowWidth;
  495. let p = 375 / screenWidth;
  496. this.lineHeight = 72*p + 'rpx';
  497. var myDate = new Date();
  498. let year = myDate.getFullYear();
  499. let month = myDate.getMonth() + 1;
  500. if (month >= 1 && month <= 9) {
  501. month = "0" + month;
  502. }
  503. let day = myDate.getDate();
  504. for(let i in this.years) {
  505. if (year == this.years[i]) {
  506. this.dateVal[0] = +i
  507. }
  508. }
  509. for(let i in this.months) {
  510. if (month == this.months[i]) {
  511. this.dateVal[1] = +i
  512. }
  513. }
  514. if(month == 2) {
  515. if(year%4 == 0 && year %400 != 0) {
  516. this.days = this.otherDays
  517. }else {
  518. this.days = this.secDays
  519. }
  520. }else if((month < 8 && month%2 == 1) || (month > 7 && month%2 == 0)) {
  521. this.days = this.bigDays
  522. }else {
  523. this.days = this.smallDays
  524. }
  525. for(let i in this.days) {
  526. if (day == this.days[i]) {
  527. this.dateVal[2] = +i
  528. }
  529. }
  530. },
  531. onShow() {
  532. this.$showLoading({
  533. type: 'global',
  534. text: '加载中...'
  535. });
  536. this.getList();
  537. },
  538. methods: {
  539. getList() {
  540. this.$request({
  541. url: this.$api.app_admin.setting
  542. }).then(response => {
  543. if (response.code === 0) {
  544. this.detail = response.data.detail;
  545. this.$hideLoading();
  546. let { over_time, delivery_time, after_sale_time, payment_type, member_integral,member_integral_rule, is_auto_open } = this.detail.setting;
  547. this.over_time = over_time;
  548. this.delivery_time = delivery_time;
  549. this.after_sale_time = after_sale_time;
  550. this.payment_type = payment_type;
  551. this.member_integral = member_integral;
  552. this.member_integral_rule = member_integral_rule;
  553. this.chooseAuto = is_auto_open;
  554. let sendType = this.detail.setting.send_type;
  555. for (let i = 0; i < sendType.length; i++) {
  556. if (sendType[i] === 'express') {
  557. this.express = true;
  558. } else if(sendType[i] === 'offline') {
  559. this.offline = true;
  560. } else if (sendType[i] === 'city') {
  561. this.city = true;
  562. }
  563. }
  564. this.name = this.detail.name;
  565. this.mail = response.data.mail;
  566. this.sms = response.data.sms;
  567. for (let i = 0; i < payment_type.length; i++) {
  568. if (payment_type[i] === 'online_pay') {
  569. this.online_pay = true;
  570. } else if (payment_type[i] === 'huodao') {
  571. this.huodao = true;
  572. } else if (payment_type[i] === 'balance') {
  573. this.balance = true;
  574. }
  575. }
  576. for(let date of this.date) {
  577. for(let item of this.detail.setting.week_list) {
  578. if(date.value == item) {
  579. date.check = true;
  580. }
  581. }
  582. }
  583. }
  584. })
  585. },
  586. dateChange: function(e) {
  587. const val = e.detail.value;
  588. this.dateVal = e.detail.value;
  589. let years = this.years;
  590. let year = this.years[val[0]];
  591. let month = this.months[val[1]];
  592. if(month == 2) {
  593. if(year%4 == 0 && year %400 != 0) {
  594. this.days = this.otherDays
  595. }else {
  596. this.days = this.secDays
  597. }
  598. }else if((month < 8 && month%2 == 1) || (month > 7 && month%2 == 0)) {
  599. this.days = this.bigDays
  600. }else {
  601. this.days = this.smallDays
  602. }
  603. },
  604. timeChange: function(e) {
  605. this.timeVal = e.detail.value;
  606. },
  607. openAuto() {
  608. this.chooseAuto = this.detail.setting.is_auto_open;
  609. if(this.chooseAuto == 2 && this.detail.setting.auto_open_time.length > 0) {
  610. for(let i in this.years) {
  611. if (this.detail.setting.auto_open_time.substring(0, 4) == this.years[i]) {
  612. this.dateVal[0] = +i
  613. }
  614. }
  615. for(let i in this.months) {
  616. if (this.detail.setting.auto_open_time.substring(5, 7) == this.months[i]) {
  617. this.dateVal[1] = +i
  618. }
  619. }
  620. let startMonth = +this.dateVal[1] + 1;
  621. if(startMonth == 2) {
  622. if(year%4 == 0 && year %400 != 0) {
  623. this.days = this.otherDays
  624. }else {
  625. this.days = this.secDays
  626. }
  627. }else if((startMonth < 8 && startMonth%2 == 1) || (startMonth > 7 && startMonth%2 == 0)) {
  628. this.days = this.bigDays
  629. }else {
  630. this.days = this.smallDays
  631. }
  632. for(let i in this.days) {
  633. if (this.detail.setting.auto_open_time.substring(8, 10) == this.days[i]) {
  634. this.dateVal[2] = +i
  635. }
  636. }
  637. let auto_open_time = this.detail.setting.auto_open_time.substring(11);
  638. this.timeVal = auto_open_time.split(':').map(Number);
  639. }
  640. this.model = true;
  641. this.modelType = 9;
  642. },
  643. chooseWeek() {
  644. for(let date of this.date) {
  645. date.check = false;
  646. for(let item of this.detail.setting.week_list) {
  647. if(date.value == item) {
  648. date.check = true;
  649. }
  650. }
  651. }
  652. this.model = true;
  653. this.modelType = 8;
  654. },
  655. toggleOpenType(e) {
  656. if(e == 1) {
  657. this.detail.setting.open_type = e;
  658. this.submit();
  659. }else {
  660. if(this.detail.setting.week_list.length > 0) {
  661. this.detail.setting.open_type = e;
  662. this.submit();
  663. }else {
  664. this.model = true;
  665. this.modelType = 8;
  666. }
  667. }
  668. },
  669. toSettingTime() {
  670. uni.navigateTo({
  671. url: `/pages/app_admin/open-time/open-time?time_list=${JSON.stringify(this.detail.setting.time_list)}`
  672. })
  673. },
  674. chooseDate(e) {
  675. e.check = !e.check;
  676. },
  677. toRedirect(url) {
  678. uni.redirectTo({
  679. url: url
  680. })
  681. },
  682. setLogo() {
  683. let _this = this;
  684. uni.chooseImage({
  685. count: 1,
  686. sizeType: ['original', 'compressed'],
  687. sourceType: ['album', 'camera'],
  688. success(res) {
  689. uni.uploadFile({
  690. url: _this.$api.upload.file,
  691. filePath: res.tempFilePaths[0],
  692. name: 'file',
  693. success(response) {
  694. _this.detail.setting.mall_logo_pic = JSON.parse(response.data).data.url;
  695. _this.submit();
  696. }
  697. });
  698. }
  699. });
  700. },
  701. setSmsStatus() {
  702. if (this.sms.status === 1) {
  703. this.sms.status = 0;
  704. } else {
  705. this.sms.status = 1;
  706. }
  707. this.submit();
  708. },
  709. setMailStatus() {
  710. if (this.mail.status === '1') {
  711. this.mail.status = '0';
  712. } else {
  713. this.mail.status = '1';
  714. }
  715. this.submit();
  716. },
  717. openStatus() {
  718. if (this.detail.setting.is_open === 1) {
  719. this.detail.setting.is_open = 2;
  720. } else {
  721. this.detail.setting.is_open = 1;
  722. }
  723. this.submit();
  724. },
  725. setPay(data) {
  726. this[data] = !this[data];
  727. if (this.balance === false && this.huodao === false) {
  728. this.online_pay = true;
  729. }
  730. },
  731. setSend(data) {
  732. this[data] = !this[data];
  733. if (this.offline === false && this.city === false) {
  734. this.express = true;
  735. }
  736. },
  737. sendTypeHandler() {
  738. this.model = true;
  739. this.modelType = 5;
  740. },
  741. jumpGo() {
  742. this.$jump({
  743. open_type: 'navigate',
  744. url: `/pages/address/address?manual_btn_bg=admin&is_hide_default_btn=1&is_refund_address=1`
  745. });
  746. },
  747. submit() {
  748. let mail = this.mail ? this.mail.status : null;
  749. let sms = this.sms? this.sms.status : null;
  750. let data = {
  751. name: this.detail.name,
  752. setting: JSON.stringify(this.detail.setting),
  753. mail: mail,
  754. sms: sms
  755. };
  756. this.$request({
  757. url: this.$api.app_admin.setting,
  758. method: 'post',
  759. data: data,
  760. }).then(response => {
  761. if (response.code === 0) {
  762. this.model = false;
  763. }
  764. })
  765. },
  766. cancel() {
  767. this.model = false;
  768. },
  769. confirm() {
  770. if(this.modelType == 8) {
  771. let pass = false;
  772. for(let item of this.date) {
  773. if(item.check) {
  774. pass = item.check;
  775. }
  776. }
  777. if(!pass) {
  778. uni.showToast({
  779. title: '请选择营业时间',
  780. icon: 'none',
  781. duration: 1000
  782. });
  783. return false;
  784. }else {
  785. this.detail.setting.open_type = 2
  786. }
  787. }else if(this.modelType == 1 && this.over_time > 100) {
  788. uni.showToast({
  789. title: '删除未支付订单限时最大为100分钟',
  790. icon: 'none',
  791. duration: 1000
  792. });
  793. return false;
  794. }else if(this.modelType == 2 && this.delivery_time > 30) {
  795. uni.showToast({
  796. title: '自动确认收货时间为30天',
  797. icon: 'none',
  798. duration: 1000
  799. });
  800. return false;
  801. }else if(this.modelType == 3 && this.after_sale_time > 30) {
  802. uni.showToast({
  803. title: '可申请售后时间最大为30天',
  804. icon: 'none',
  805. duration: 1000
  806. });
  807. return false;
  808. }
  809. this.detail.name = this.name;
  810. this.detail.setting.over_time = this.over_time;
  811. this.detail.setting.delivery_time = this.delivery_time;
  812. this.detail.setting.after_sale_time = this.after_sale_time;
  813. this.detail.setting.payment_type = [];
  814. this.detail.setting.member_integral = this.member_integral;
  815. this.detail.setting.member_integral_rule = this.member_integral_rule;
  816. if (this.online_pay === true) {
  817. this.detail.setting.payment_type.push('online_pay');
  818. }
  819. if (this.huodao === true) {
  820. this.detail.setting.payment_type.push('huodao');
  821. }
  822. if (this.balance === true) {
  823. this.detail.setting.payment_type.push('balance');
  824. }
  825. this.detail.setting.send_type = [];
  826. if (this.offline === true) {
  827. this.detail.setting.send_type.push('offline');
  828. }
  829. if (this.express === true) {
  830. this.detail.setting.send_type.push('express');
  831. }
  832. if (this.city === true) {
  833. this.detail.setting.send_type.push('city');
  834. }
  835. this.detail.setting.week_list = [];
  836. for(let item of this.date) {
  837. if(item.check) {
  838. this.detail.setting.week_list.push(item.value)
  839. }
  840. }
  841. this.detail.setting.is_auto_open = this.chooseAuto;
  842. if(this.detail.setting.is_auto_open == 2) {
  843. let month = this.months[this.dateVal[1]];
  844. let day = this.days[this.dateVal[2]];
  845. if(month < 10) {
  846. month = '0' + month
  847. }
  848. if(day < 10) {
  849. day = '0' + day
  850. }
  851. this.detail.setting.auto_open_time = this.years[this.dateVal[0]] + '-' + month + '-' + day
  852. this.detail.setting.auto_open_time += ' ' + this.hour[this.timeVal[0]] + ':' + this.minutes[this.timeVal[1]] + ':' + this.minutes[this.timeVal[2]]
  853. }
  854. this.submit();
  855. },
  856. },
  857. components: {
  858. appRadio
  859. }
  860. }
  861. </script>
  862. <style scoped lang="scss">
  863. @import "./setting.scss";
  864. </style>