setting.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469
  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.logo ? detail.setting.logo : '../image/logo.png'" @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 dir-top-nowrap" >
  17. <view class="switch-item dir-left-nowrap cross-center" v-if="sms">
  18. <image src="../image/msg.png"></image>
  19. <view class="border dir-left-nowrap main-between" @click="setSmsStatus">
  20. <view class="app-text">短信通知</view>
  21. <view class=" cross-center">
  22. <view class="switch-view" :class="{'app-switch-view':sms.status == 1 }">
  23. <view class="click" :class="{'app-switch': sms.status == 1 }"></view>
  24. </view>
  25. </view>
  26. </view>
  27. </view>
  28. <view class="switch-item dir-left-nowrap cross-center" v-if="mail">
  29. <image src="../image/mail.png"></image>
  30. <view class="dir-left-nowrap main-between" @click="setMailStatus">
  31. <view class="app-text">邮件通知</view>
  32. <view class="cross-center" >
  33. <view class="switch-view" :class="{'app-switch-view':mail.status == 1 }">
  34. <view class="click" :class="{'app-switch':mail.status == 1 }"></view>
  35. </view>
  36. </view>
  37. </view>
  38. </view>
  39. </view>
  40. <view class="switch-time dir-top-nowrap">
  41. <view class="switch-time-item dir-left-nowrap cross-center">
  42. <image src="../image/delete-time.png"></image>
  43. <view class="switch-time-content dir-left-nowrap main-between border" @click="() => {model = true;modelType = 1;over_time = detail.setting.over_time}">
  44. <view class="app-text-switch app-text">删除未支付订单限时</view>
  45. <view class="app-icon-text dir-left-nowrap cross-center" >
  46. <view>{{detail.setting.over_time}}分</view>
  47. <image class="app-icon" src="../image/arrow-right.png"></image>
  48. </view>
  49. </view>
  50. </view>
  51. <view class="switch-time-item dir-left-nowrap cross-center">
  52. <image src="../image/auto.png"></image>
  53. <view class="switch-time-content dir-left-nowrap main-between border" @click="() => {model = true;modelType = 2;delivery_time = detail.setting.delivery_time}">
  54. <view class="app-text-switch app-text">自动确认收货时间</view>
  55. <view class="app-icon-text dir-left-nowrap cross-center">
  56. <view>{{detail.setting.delivery_time}}天</view>
  57. <image class="app-icon" src="../image/arrow-right.png"></image>
  58. </view>
  59. </view>
  60. </view>
  61. <view class="switch-time-item dir-left-nowrap cross-center">
  62. <image src="../image/refund.png"></image>
  63. <view class="switch-time-content dir-left-nowrap main-between" @click="() => {model = true;modelType = 3;after_sale_time = detail.setting.after_sale_time}">
  64. <view class="app-text-switch app-text">可申请售后时间</view>
  65. <view class="app-icon-text dir-left-nowrap cross-center" >
  66. <view>{{detail.setting.after_sale_time}}天</view>
  67. <image class="app-icon" src="../image/arrow-right.png"></image>
  68. </view>
  69. </view>
  70. </view>
  71. </view>
  72. <view class="online-payment">
  73. <view @click="() => {model = true;modelType = 4;payment_type = detail.setting.payment_type}">
  74. <view class="online-payment-content dir-left-nowrap cross-center">
  75. <image class="app-image" src="../image/pay.png"></image>
  76. <view class="dir-top-nowrap">
  77. <view class="payment-text">支付方式</view>
  78. <view class="payment-method-text">线上支付/货到付款/余额支付</view>
  79. </view>
  80. <image class="app-icon" src="../image/arrow-right.png"></image>
  81. </view>
  82. </view>
  83. </view>
  84. <view class="shipping-return">
  85. <view class="shipping-return-item dir-left-nowrap cross-center" >
  86. <image class="item-image" src="../image/send.png"></image>
  87. <view class="item-view dir-left-nowrap border main-between" @click="sendTypeHandler">
  88. <view class="app-text">发货方式</view>
  89. <view class="right dir-left-nowrap cross-center">
  90. <view>{{detail.setting.send_type.length > 0 ? '已选择': '未选择'}}</view>
  91. <image src="../image/arrow-right.png"></image>
  92. </view>
  93. </view>
  94. </view>
  95. <view class="shipping-return-item dir-left-nowrap cross-center">
  96. <image class="item-image" src="../image/address.png"></image>
  97. <view class="item-view dir-left-nowrap main-between" @click="jumpGo">
  98. <view class="app-text">退货地址</view>
  99. <view class="right dir-left-nowrap cross-center">
  100. <view>已填写</view>
  101. <image src="../image/arrow-right.png"></image>
  102. </view>
  103. </view>
  104. </view>
  105. </view>
  106. <view class="integral">
  107. <view class="integral-item dir-left-nowrap cross-center">
  108. <image src="../image/intergral.png"></image>
  109. <view class="text-content dir-left-nowrap main-between" @click="model = true;modelType = 6;member_integral = detail.setting.member_integral">
  110. <view class="app-text">积分抵扣</view>
  111. <view class="right dir-left-nowrap cross-center">
  112. <view>{{detail.setting.member_integral}}积分抵扣1元</view>
  113. <image src="../image/arrow-right.png"></image>
  114. </view>
  115. </view>
  116. </view>
  117. <view class="integral-item dir-left-nowrap cross-center">
  118. <image src="../image/rule.png"></image>
  119. <view class="text-content dir-left-nowrap main-between" @click="model = true;modelType = 7;member_integral_rule = detail.setting.member_integral_rule">
  120. <view class="app-text">积分使用规则</view>
  121. <view class="right dir-left-nowrap cross-center">
  122. <view>{{detail.setting.member_integral_rule.length > 0 ? '已填写' : '未填写'}}</view>
  123. <image src="../image/arrow-right.png"></image>
  124. </view>
  125. </view>
  126. </view>
  127. </view>
  128. </view>
  129. <view :class="['bottom-place', `${iphone_x? 'iphone_x':''}`]"></view>
  130. <view :class="['main-between','bottom-tab',`${iphone_x? 'iphone_x':''}`]">
  131. <view class="box-grow-1 tab-item" @click="toRedirect('/pages/app_admin/index/index')">
  132. <image class="tab-icon" src="./../image/index.png"></image>
  133. <view>首页</view>
  134. </view>
  135. <view class="box-grow-1 tab-item" @click="toRedirect('/pages/app_admin/order/order')">
  136. <image class="tab-icon" src="./../image/order.png"></image>
  137. <view>订单</view>
  138. </view>
  139. <view class="box-grow-1 tab-item" @click="toRedirect('/pages/app_admin/goods/goods')">
  140. <image class="tab-icon" src="./../image/goods.png"></image>
  141. <view>商品</view>
  142. </view>
  143. <view class="box-grow-1 tab-item active">
  144. <image class="tab-icon" src="./../image/setting-active.png"></image>
  145. <view>设置</view>
  146. </view>
  147. </view>
  148. <view @touchmove.stop.prevent="" class="model" v-if="model">
  149. <view class="content">
  150. <view class="title">{{modelType === 0 ? '修改商城名称' : modelType === 1 ? '删除未支付订单限时': modelType === 2 ? '自动确认收货时间': modelType === 3 ? '可申请售后天数': modelType === 4 ? '支付方式': modelType === 5 ? '发货方式': modelType === 6 ? '积分抵扣':modelType === 7 ? '积分使用规则': ''}}</view>
  151. <view class="content-text">
  152. <template v-if="modelType === 0">
  153. <input placeholder="最多输入15个字符" type="text" class="name" maxlength="15" v-model="name">
  154. </template>
  155. <template v-if="modelType === 1">
  156. <view class="dir-left-nowrap main-center intergral-change">
  157. <view class="intergral-input">
  158. <input type="text" class="input" v-model="over_time">
  159. </view>
  160. <view>分钟</view>
  161. </view>
  162. </template>
  163. <template v-if="modelType === 2">
  164. <view class="dir-left-nowrap main-center intergral-change">
  165. <view class="intergral-input">
  166. <input type="text" class="input" v-model="delivery_time">
  167. </view>
  168. <view>天</view>
  169. </view>
  170. </template>
  171. <template v-if="modelType === 3">
  172. <view class="dir-left-nowrap main-center intergral-change">
  173. <view class="intergral-input">
  174. <input type="text" class="input" v-model="after_sale_time">
  175. </view>
  176. <view>天</view>
  177. </view>
  178. </template>
  179. <template v-if="modelType === 4">
  180. <view class="dir-top dir-top-nowrap main-center pay-change">
  181. <view class="pay-view" :class="{'app-active': online_pay}" @click="setPay('online_pay')">
  182. <view class="left dir-left-nowrap cross-center main-between" >
  183. <view class="dir-left-nowrap cross-center">
  184. <image src="../image/online-payment.png"></image>
  185. <view>线上支付</view>
  186. </view>
  187. <image v-if="online_pay" class="active" src="../image/check.png"></image>
  188. </view>
  189. </view>
  190. <view class="pay-view" :class="{'app-active': balance}" @click="setPay('balance')">
  191. <view class="left dir-left-nowrap cross-center main-between" >
  192. <view class="dir-left-nowrap cross-center">
  193. <image src="../image/balance.png"></image>
  194. <view>余额支付</view>
  195. </view>
  196. <image v-if="balance" class="active" src="../image/check.png"></image>
  197. </view>
  198. </view>
  199. <view class="pay-view" :class="{'app-active': huodao}" @click="setPay('huodao')">
  200. <view class="left dir-left-nowrap cross-center main-between">
  201. <view class="dir-left-nowrap cross-center">
  202. <image src="../image/cash-on-delivery.png"></image>
  203. <view>货到付款</view>
  204. </view>
  205. <image v-if="huodao" class="active" src="../image/check.png"></image>
  206. </view>
  207. </view>
  208. </view>
  209. </template>
  210. <template v-if="modelType === 5">
  211. <view class="dir-top dir-top-nowrap main-center pay-change">
  212. <view class="pay-view" :class="{'app-active': express}" @click="setSend('express')">
  213. <view class="left dir-left-nowrap cross-center main-between" >
  214. <view class="dir-left-nowrap cross-center">
  215. <image src="../image/express-delivery.png"></image>
  216. <view>快递配送</view>
  217. </view>
  218. <image v-if="express" class="active" src="../image/check.png"></image>
  219. </view>
  220. </view>
  221. <view class="pay-view" :class="{'app-active': offline}" @click="setSend('offline')">
  222. <view class="left dir-left-nowrap cross-center main-between" >
  223. <view class="dir-left-nowrap cross-center">
  224. <image src="../image/self-lifting.png"></image>
  225. <view>到店自提</view>
  226. </view>
  227. <image v-if="offline" class="active" src="../image/check.png"></image>
  228. </view>
  229. </view>
  230. <view class="pay-view" :class="{'app-active': city}" @click="setSend('city')">
  231. <view class="left dir-left-nowrap cross-center main-between">
  232. <view class="dir-left-nowrap cross-center">
  233. <image src="../image/same-city.png"></image>
  234. <view>同城配送</view>
  235. </view>
  236. <image v-if="city" class="active" src="../image/check.png"></image>
  237. </view>
  238. </view>
  239. </view>
  240. </template>
  241. <template v-if="modelType === 6">
  242. <view class="i-modal-body free">
  243. <view class="main-center intergral-change">
  244. <input type="number" class="intergral-input" v-model="member_integral">
  245. <view >积分抵扣1元</view>
  246. </view>
  247. </view>
  248. </template>
  249. <template v-if="modelType === 7">
  250. <view class="main-center cross-center textarea-area">
  251. <textarea class="textarea" v-model="member_integral_rule"></textarea>
  252. </view>
  253. </template>
  254. </view>
  255. <view class="buttons dir-left-nowrap cross-center">
  256. <view class="but cancel">
  257. <view @click="() => {cancel();}">取消</view>
  258. </view>
  259. <view class="line"></view>
  260. <view class="but confirm">
  261. <view @click="confirm">确认</view>
  262. </view>
  263. </view>
  264. </view>
  265. </view>
  266. </app-layout>
  267. </template>
  268. <script>
  269. import appSwitch from '../../../components/basic-component/app-switch/app-switch.vue';
  270. export default {
  271. name: "setting",
  272. data() {
  273. return {
  274. detail: {},
  275. mail: {},
  276. sms: {},
  277. model: false,
  278. modelType: 0,
  279. name: '',
  280. over_time: '',
  281. delivery_time: '',
  282. after_sale_time: '',
  283. payment_type: [],
  284. online_pay: false,
  285. balance: false,
  286. huodao: false,
  287. send_type: [],
  288. express: false,
  289. offline: false,
  290. city: false,
  291. member_integral: '',
  292. member_integral_rule: '',
  293. iphone_x: false
  294. }
  295. },
  296. onLoad() {
  297. let that = this;
  298. uni.getSystemInfo({
  299. success: function (res) {
  300. if(res.model.indexOf('iPhone X') > -1 || res.model.indexOf('iPhone 11') > -1 || res.model.indexOf('iPhone11') > -1 || res.model.indexOf('iPhone12') > -1 || res.model.indexOf('Unknown Device') > -1) {
  301. that.iphone_x = true;
  302. }
  303. }
  304. });
  305. this.$request({
  306. url: this.$api.app_admin.setting
  307. }).then(response => {
  308. if (response.code === 0) {
  309. this.detail = response.data.detail;
  310. let { over_time, delivery_time, after_sale_time, payment_type, member_integral,member_integral_rule } = this.detail.setting;
  311. this.over_time = over_time;
  312. this.delivery_time = delivery_time;
  313. this.after_sale_time = after_sale_time;
  314. this.payment_type = payment_type;
  315. this.member_integral = member_integral;
  316. this.member_integral_rule = member_integral_rule;
  317. let sendType = this.detail.setting.send_type;
  318. for (let i = 0; i < sendType.length; i++) {
  319. if (sendType[i] === 'express') {
  320. this.express = true;
  321. } else if(sendType[i] === 'offline') {
  322. this.offline = true;
  323. } else if (sendType[i] === 'city') {
  324. this.city = true;
  325. }
  326. }
  327. this.name = this.detail.name;
  328. this.mail = response.data.mail;
  329. this.sms = response.data.sms;
  330. for (let i = 0; i < payment_type.length; i++) {
  331. if (payment_type[i] === 'online_pay') {
  332. this.online_pay = true;
  333. } else if (payment_type[i] === 'huodao') {
  334. this.huodao = true;
  335. } else if (payment_type[i] === 'balance') {
  336. this.balance = true;
  337. }
  338. }
  339. }
  340. })
  341. },
  342. methods: {
  343. toRedirect(url) {
  344. uni.redirectTo({
  345. url: url
  346. })
  347. },
  348. setLogo() {
  349. let _this = this;
  350. uni.chooseImage({
  351. count: 1,
  352. sizeType: ['original', 'compressed'],
  353. sourceType: ['album', 'camera'],
  354. success(res) {
  355. uni.uploadFile({
  356. url: _this.$api.upload.file,
  357. filePath: res.tempFilePaths[0],
  358. name: 'file',
  359. success(response) {
  360. _this.detail.setting.logo = JSON.parse(response.data).data.url;
  361. _this.submit();
  362. },
  363. fail(response) {
  364. }
  365. });
  366. }
  367. });
  368. },
  369. setSmsStatus() {
  370. if (this.sms.status === 1) {
  371. this.sms.status = 0;
  372. } else {
  373. this.sms.status = 1;
  374. }
  375. this.submit();
  376. },
  377. setMailStatus() {
  378. if (this.mail.status === '1') {
  379. this.mail.status = '0';
  380. } else {
  381. this.mail.status = '1';
  382. }
  383. this.submit();
  384. },
  385. setPay(data) {
  386. this[data] = !this[data];
  387. if (this.balance === false && this.huodao === false) {
  388. this.online_pay = true;
  389. }
  390. },
  391. setSend(data) {
  392. this[data] = !this[data];
  393. if (this.offline === false && this.city === false) {
  394. this.express = true;
  395. }
  396. },
  397. sendTypeHandler() {
  398. this.model = true;
  399. this.modelType = 5;
  400. },
  401. jumpGo() {
  402. this.$jump({
  403. open_type: 'navigate',
  404. url: `/pages/address/address?manual_btn_bg=#446dfd&is_hide_default_btn=1&is_refund_address=1`,
  405. });
  406. },
  407. submit() {
  408. let mail = this.mail ? this.mail.status : null;
  409. let sms = this.sms? this.sms.status : null;
  410. let data = {
  411. name: this.detail.name,
  412. setting: JSON.stringify(this.detail.setting),
  413. mail: mail,
  414. sms: sms,
  415. };
  416. this.$request({
  417. url: this.$api.app_admin.setting,
  418. method: 'post',
  419. data: data,
  420. }).then(response => {
  421. if (response.code === 0) {
  422. this.model = false;
  423. }
  424. })
  425. },
  426. cancel() {
  427. this.model = false;
  428. },
  429. confirm() {
  430. this.detail.name = this.name;
  431. this.detail.setting.over_time = this.over_time;
  432. this.detail.setting.delivery_time = this.delivery_time;
  433. this.detail.setting.after_sale_time = this.after_sale_time;
  434. this.detail.setting.payment_type = [];
  435. this.detail.setting.member_integral = this.member_integral;
  436. this.detail.setting.member_integral_rule = this.member_integral_rule;
  437. if (this.online_pay === true) {
  438. this.detail.setting.payment_type.push('online_pay');
  439. }
  440. if (this.huodao === true) {
  441. this.detail.setting.payment_type.push('huodao');
  442. }
  443. if (this.balance === true) {
  444. this.detail.setting.payment_type.push('balance');
  445. }
  446. this.detail.setting.send_type = [];
  447. if (this.offline === true) {
  448. this.detail.setting.send_type.push('offline');
  449. }
  450. if (this.express === true) {
  451. this.detail.setting.send_type.push('express');
  452. }
  453. if (this.city === true) {
  454. this.detail.setting.send_type.push('city');
  455. }
  456. this.submit();
  457. },
  458. },
  459. components: {
  460. 'app-switch': appSwitch,
  461. }
  462. }
  463. </script>
  464. <style scoped lang="scss">
  465. @import "./setting.scss";
  466. </style>