shopdetail.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816
  1. <template>
  2. <view class="shopdetail">
  3. <!-- <Header :title="title"></Header>
  4. <view class="" style="height: 94upx;"></view> -->
  5. <view class="shopdetail-content">
  6. <!-- 所属店铺 -->
  7. <view class="shop detail-list">
  8. <view class="menu">
  9. <view class="uni-list-cell">
  10. <view class="uni-list-cell-db">
  11. <picker
  12. class="selectlist"
  13. mode="selector"
  14. @change="changeStore"
  15. :value="storeIndex"
  16. :range="storeList"
  17. range-key="name"
  18. >
  19. <view class="uni-input title">{{
  20. storeList[storeIndex].name
  21. }}</view>
  22. </picker>
  23. <image
  24. src="../../static/images/moreicon.png"
  25. class="more"
  26. ></image>
  27. </view>
  28. </view>
  29. </view>
  30. </view>
  31. <!-- 商品类型 -->
  32. <view class="shoptype detail-list noborder">
  33. <view class="menu">
  34. <view class="uni-list-cell">
  35. <view class="uni-list-cell-db">
  36. <picker
  37. @change="changeType"
  38. :value="typeIndex"
  39. :range="typeList"
  40. range-key="name"
  41. class="selectlist"
  42. >
  43. <view class="uni-input title">{{
  44. typeList[typeIndex].name
  45. }}</view>
  46. </picker>
  47. <image
  48. src="../../static/images/moreicon.png"
  49. class="more"
  50. ></image>
  51. </view>
  52. </view>
  53. </view>
  54. </view>
  55. <!-- 商品名称 -->
  56. <view class="shopname detail-list">
  57. <view class="menu" v-if="hasNameList === 1">
  58. <view class="uni-list-cell">
  59. <view class="uni-list-cell-db">
  60. <picker
  61. @change="changeShop"
  62. :value="shopIndex"
  63. :range="shopList"
  64. range-key="name"
  65. class="selectlist"
  66. >
  67. <view class="uni-input title">{{
  68. shopList[shopIndex].name
  69. }}</view>
  70. </picker>
  71. <image
  72. src="../../static/images/moreicon.png"
  73. class="more"
  74. ></image>
  75. </view>
  76. </view>
  77. </view>
  78. <view class="menu" v-if="hasNameList === 0">
  79. <input
  80. class="input-shopname"
  81. type="text"
  82. v-model="shopname"
  83. placeholder-style="color:#a2a8a8;font-size:30upx"
  84. placeholder="请输入商品名称"
  85. />
  86. </view>
  87. </view>
  88. <!-- 自定义分类 -->
  89. <view class="classify detail-list noborder">
  90. <view class="menu">
  91. <view class="title bigtitle">自定义分类</view>
  92. <view class="txt" @tap="toClassify">管理分类</view>
  93. </view>
  94. </view>
  95. <!-- 西线推荐 -->
  96. <view class="xiline detail-list noborder">
  97. <view class="menu">
  98. <view class="uni-list-cell">
  99. <view class="uni-list-cell-db">
  100. <picker
  101. @change="changeClassify"
  102. :value="lineIndex"
  103. :range="lineList"
  104. range-key="name"
  105. class="selectlist"
  106. >
  107. <view class="uni-input title">{{
  108. lineList[lineIndex].name
  109. }}</view>
  110. </picker>
  111. <image
  112. src="../../static/images/moreicon.png"
  113. class="more"
  114. ></image>
  115. </view>
  116. </view>
  117. </view>
  118. </view>
  119. <!-- 账号限制 -->
  120. <view class="idastrict detail-list noborder">
  121. <view class="menu">
  122. <view class="title astricttitle">账号限制</view>
  123. <switch :checked="showoperat" @change="Change" />
  124. </view>
  125. </view>
  126. <!-- 账号限制 -->
  127. <view class="detail-list noborder operat" v-if="showoperat">
  128. <view class="menu">
  129. <view class="title">同一账号在</view>
  130. <view class="sub" @tap="subtractUser">-</view>
  131. <text class="num1">{{ num1 }}</text>
  132. <view class="add" @tap="addUser">+</view>
  133. <view class="txt">天内最多购买</view>
  134. <view class="sub" @tap="subtractDate">-</view
  135. ><text class="num2">{{ num2 }}</text
  136. ><view class="add" @tap="addDate">+</view><text class="unit">张</text>
  137. </view>
  138. </view>
  139. <!-- 商品图标 -->
  140. <view class="shopicon">商品图标</view>
  141. <view class="iconcontent">
  142. <image class="shopLogo" :src="iconurl" v-if="iconurl"></image>
  143. <text class="icon" @tap="uploadImg">点击上传</text>
  144. </view>
  145. <view class="shopicon">商品图册</view>
  146. <view class="uploading">
  147. <view class="item-warp" v-for="(item, index) in pickList" :key="index">
  148. <view class="img-warp">
  149. <image :src="item" class="item list"></image>
  150. <view class="delete">
  151. <image
  152. src="../../static/images/delete.png"
  153. class="delete-icon"
  154. @tap="deleteThisImg(index)"
  155. ></image>
  156. </view>
  157. </view>
  158. </view>
  159. <view class="item-warp">
  160. <image
  161. src="../../static/images/upload.png"
  162. class="item upload"
  163. @tap="uploadList"
  164. ></image>
  165. </view>
  166. </view>
  167. <!-- 购票须知 -->
  168. <view class="shopicon">商品描述(购票须知)</view>
  169. <view class="know">
  170. <view class="container">
  171. <editor
  172. id="editor"
  173. class="ql-container"
  174. :placeholder="placeholder"
  175. @input="saveTxt"
  176. @ready="onEditorReady"
  177. ></editor>
  178. </view>
  179. </view>
  180. <view class="btn" @tap="submitMesage">确认</view>
  181. <rf-loading v-if="loading"></rf-loading>
  182. </view>
  183. </view>
  184. </template>
  185. <script>
  186. let myCloud;
  187. import Header from '../components/header.vue';
  188. export default {
  189. components: {
  190. Header,
  191. },
  192. data() {
  193. return {
  194. loading: false,
  195. scenicId: uni.getStorageSync('scenicId'),
  196. title: '商品详情',
  197. num1: 1,
  198. num2: 10,
  199. showoperat: false,
  200. placeholder: '请输入内容...',
  201. mastKnow: '',
  202. storeList: [{ name: '所属店铺', id: '' }],
  203. storeIndex: 0,
  204. storeId: '',
  205. typeList: [{ name: '商品类型(请先选择所属店铺)', id: '' }],
  206. typeIndex: 0,
  207. typeId: '',
  208. shopList: [{ name: '商品名称(请先选择商品类型)', id: '' }],
  209. shopIndex: 0,
  210. shopId: '',
  211. shopname: '',
  212. hasNameList: 0, // 判断是否有商品名称列表
  213. lineList: [{ name: '分类(请先选择所属商品)', id: '' }],
  214. lineIndex: 0,
  215. lineId: '',
  216. // 图标上传
  217. iconurl: '',
  218. pickList: [],
  219. Icon: '',
  220. Imglist: [],
  221. // -------------- 编辑分界线 ------------------------------------
  222. SHOPID: 0,
  223. shopData: {},
  224. };
  225. },
  226. onUnload() {
  227. uni.removeStorageSync('Id');
  228. },
  229. onLoad() {
  230. // 初始化阿里云
  231. myCloud = uniCloud.init({
  232. provider: 'aliyun',
  233. spaceId: 'db8671a1-69bd-470d-ad59-ba927c88f4a4',
  234. clientSecret: '8nOzV70edtpCd0El6qce3g==',
  235. });
  236. this.getShopList();
  237. // ---------------------------------------------------
  238. this.SHOPID = uni.getStorageSync('Id');
  239. if (this.SHOPID) {
  240. this.getShopBuyId();
  241. }
  242. },
  243. methods: {
  244. // 获取单个商品信息
  245. async getShopBuyId() {
  246. if (!this.SHOPID) return;
  247. await this.$http
  248. .get('/goods/getById/' + this.SHOPID)
  249. .then(async (res) => {
  250. if (res.code === 200 && res.msg === 'OK') {
  251. console.log(res);
  252. this.shopData = res.data;
  253. this.getShopList()
  254. // 限制购票回显
  255. if (this.shopData.saleRule === '1') {
  256. let sale = JSON.parse(this.shopData.saleRuleJson);
  257. this.showoperat = true;
  258. this.num1 = sale.data.saleDay;
  259. this.num2 = sale.data.saleNum;
  260. } else {
  261. this.showoperat = false;
  262. }
  263. // 图标回显
  264. if (this.shopData.icon) {
  265. this.iconurl = this.shopData.icon;
  266. } else {
  267. this.iconurl = ''
  268. }
  269. }
  270. });
  271. },
  272. // 初始化编辑器
  273. onEditorReady() {
  274. uni
  275. .createSelectorQuery()
  276. .select('#editor')
  277. .context((res) => {
  278. this.editorCtx = res.context;
  279. this.editorCtx.setContents({
  280. html: this.shopData.describ, //this.EditGoodsDetail.content为赋值内容。
  281. });
  282. })
  283. .exec();
  284. },
  285. // -----------------------------------------------------------------
  286. // 跳转到管理分类页面
  287. toClassify() {
  288. if (this.storeId) {
  289. uni.setStorageSync('shopid', this.storeId);
  290. this.$mRouter.push({ route: '/pages/shop/classify' });
  291. } else {
  292. this.$mHelper.toast('请选择所属店铺后再进行自定义分类管理');
  293. }
  294. },
  295. // 选择店铺
  296. changeStore(e) {
  297. this.storeIndex = e.detail.value;
  298. this.storeId = this.storeList[this.storeIndex].id;
  299. // 未选择商铺不能进行商铺类型选择
  300. if (this.storeId != '') {
  301. this.getType();
  302. this.getLine(); // 判断是否有商品名称列表
  303. }
  304. },
  305. // 选择商品类型
  306. changeType(e) {
  307. this.typeIndex = e.detail.value;
  308. this.typeId = this.typeList[this.typeIndex].id;
  309. if (this.typeId != '') {
  310. this.getShopName();
  311. }
  312. },
  313. // 商品名称选择
  314. changeShop(e) {
  315. this.shopIndex = e.detail.value;
  316. this.shopId = this.shopList[this.shopIndex].id;
  317. },
  318. // 分类
  319. changeClassify(e) {
  320. this.lineIndex = e.detail.value;
  321. this.lineId = this.lineList[this.lineIndex].id;
  322. },
  323. // 所属店铺
  324. async getShopList() {
  325. this.storeList = [{ name: '所属店铺', id: '' }];
  326. await this.$http
  327. .get('/shop/getList', {
  328. mid: this.scenicId,
  329. })
  330. .then(async (res) => {
  331. if (res.data) {
  332. let arr = [];
  333. res.data.forEach((element) => {
  334. arr.push({ name: element.name, id: element.id });
  335. });
  336. this.storeList = this.storeList.concat(arr);
  337. // 所属店铺回显
  338. if (this.shopData.shopId) {
  339. this.storeList.forEach((item, index) => {
  340. if (this.shopData.shopId === item.id) {
  341. this.storeIndex = index;
  342. }
  343. });
  344. this.storeId = this.storeList[this.storeIndex].id;
  345. // 商品类型回显
  346. this.getType();
  347. this.getLine();
  348. }
  349. }
  350. });
  351. },
  352. // 商品类型
  353. async getType() {
  354. this.typeList = [{ name: '商品类型(请先选择所属店铺)', id: '' }];
  355. this.$http
  356. .get('/type/getTypeListByShopId', {
  357. id: this.storeId,
  358. })
  359. .then((res) => {
  360. let arr = [];
  361. res.data[0].children.forEach((element) => {
  362. arr.push({ name: element.name, id: element.id });
  363. });
  364. this.typeList = this.typeList.concat(arr);
  365. // 商品类型回显
  366. if (this.shopData.typeId) {
  367. this.typeList.forEach((item, index) => {
  368. if (this.shopData.typeId === item.id) {
  369. this.typeIndex = index;
  370. }
  371. });
  372. this.typeId = this.typeList[this.typeIndex].id;
  373. this.shopname = this.shopData.name;
  374. }
  375. });
  376. },
  377. // 商品名称
  378. async getShopName() {
  379. this.shopList = [{ name: '商品名称(请先选择商品类型)', id: '' }];
  380. await this.$http
  381. .get('/goods/getTicketGoods', {
  382. typeId: this.typeId,
  383. shopId: this.storeId,
  384. })
  385. .then(async (res) => {
  386. let arr = [];
  387. res.data.forEach((element) => {
  388. arr.push({ name: element.ticket_name, id: element.ticket_no });
  389. });
  390. this.shopList = this.shopList.concat(arr);
  391. });
  392. },
  393. // 线路分配
  394. async getLine() {
  395. await this.$http
  396. .get('/goods/getCustomGroupList', {
  397. shopId: this.storeId,
  398. })
  399. .then(async (res) => {
  400. let arr = [];
  401. this.hasNameList = +res.data.shopFrom;
  402. res.data.customGroupList.forEach((element) => {
  403. arr.push({ name: element.name, id: element.id });
  404. });
  405. this.lineList = this.lineList.concat(arr);
  406. // 可选择商品名称回显
  407. if (this.shopData.name) {
  408. this.getShopName();
  409. this.shopList.forEach((item, index) => {
  410. if (this.shopData.name === item.name) {
  411. this.shopIndex = index;
  412. } else {
  413. this.shopIndex = 0;
  414. }
  415. });
  416. this.shopId = this.shopList[this.shopIndex].id;
  417. }
  418. // 分类回显
  419. if (this.shopData.customGroupId) {
  420. this.lineList.forEach((item, index) => {
  421. if (this.shopData.customGroupId === item.id) {
  422. this.lineIndex = index;
  423. }
  424. });
  425. this.lineId = this.lineList[this.lineIndex].id;
  426. }
  427. });
  428. },
  429. // 账号限制
  430. Change(e) {
  431. this.showoperat = e.detail.value;
  432. },
  433. subtractUser() {
  434. if (this.num1 <= 1) {
  435. this.$mHelper.toast('最少一天');
  436. return;
  437. } else {
  438. this.num1--;
  439. }
  440. },
  441. addUser() {
  442. this.num1++;
  443. },
  444. subtractDate() {
  445. if (this.num2 <= 1) {
  446. this.$mHelper.toast('最少一张票');
  447. return;
  448. } else {
  449. this.num2--;
  450. }
  451. },
  452. addDate() {
  453. this.num2++;
  454. },
  455. // 图标上传
  456. uploadImg() {
  457. let _self = this;
  458. uni.chooseImage({
  459. count: 1,
  460. sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
  461. sourceType: ['album'], // camera 使用相机 album 从相册中选
  462. success: function (res) {
  463. // 成功则返回图片的本地文件路径列表 tempFilePaths
  464. _self.iconurl = res.tempFilePaths[0];
  465. myCloud.uploadFile({
  466. url: 'http://192.168.100.135:83/merch/common/upload/oss',
  467. filePath: _self.iconurl, // 要上传的文件对象
  468. cloudPath: _self.iconurl,
  469. name: 'file',
  470. onUploadProgress: function (progressEvent) {
  471. // 上传进度回调
  472. let percentCompleted = Math.round(
  473. (progressEvent.loaded * 100) / progressEvent.total
  474. );
  475. },
  476. success: (res) => {
  477. if (res.fileID) {
  478. _self.Icon = res.fileID;
  479. }
  480. },
  481. });
  482. },
  483. });
  484. },
  485. // 图册上传
  486. uploadList() {
  487. let _self = this;
  488. uni.chooseImage({
  489. count: 6,
  490. sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
  491. sourceType: ['album'], // camera 使用相机 album 从相册中选
  492. success: function (res) {
  493. // 成功则返回图片的本地文件路径列表 tempFilePaths
  494. let img = [];
  495. img.push(res.tempFilePaths);
  496. if (_self.pickList.length >= 6) {
  497. _self.$mHelper.toast('最多只可上传6张图片');
  498. } else {
  499. _self.pickList = _self.pickList.concat(img);
  500. // for (let i = 0; i < _self.pickList.length; i++) {
  501. // let element = _self.pickList[i];
  502. // myCloud.uploadFile({
  503. // url: 'http://192.168.100.135:83/merch/common/upload/oss',
  504. // filePath: element, // 要上传的文件对象
  505. // cloudPath: element,
  506. // name: 'file',
  507. // onUploadProgress: function (progressEvent) {
  508. // // 上传进度回调
  509. // let percentCompleted = Math.round(
  510. // (progressEvent.loaded * 100) / progressEvent.total
  511. // );
  512. // },
  513. // success: (res) => {
  514. // },
  515. // });
  516. // }
  517. }
  518. },
  519. });
  520. },
  521. // 删除图册中的图片
  522. deleteThisImg(index) {
  523. this.pickList.splice(index, 1);
  524. },
  525. // 富文本失去焦点保存内容
  526. saveTxt(e) {
  527. this.mastKnow = e.detail.html;
  528. },
  529. // 内容提交
  530. submitMesage() {
  531. let _this = this;
  532. this.loading = true;
  533. let astrictDate = {};
  534. // 判断是否限制账号购买
  535. if (this.showoperat) {
  536. this.showoperat = '1';
  537. astrictDate = {
  538. data: {
  539. saleDay: this.num1,
  540. saleNum: this.num2,
  541. },
  542. };
  543. } else {
  544. this.showoperat = '0';
  545. astrictDate = '';
  546. }
  547. // 判断是否可以自定义商品名称
  548. let name = '';
  549. if (this.shopList.length === 1) {
  550. name = this.shopname;
  551. } else {
  552. name = this.shopList[this.shopIndex].id;
  553. }
  554. if (!this.storeId) {
  555. this.$mHelper.toast('请选择所属商铺');
  556. this.loading = false;
  557. return;
  558. }
  559. if (!this.typeId) {
  560. this.$mHelper.toast('请选择商品类型');
  561. this.loading = false;
  562. return;
  563. }
  564. if (!name) {
  565. this.$mHelper.toast('请选择商品名称或者输入商品名称');
  566. this.loading = false;
  567. return;
  568. }
  569. console.log(this.shopData.del);
  570. console.log(this.shopData.upDown);
  571. this.$http
  572. .post('/goods/add', {
  573. id: this.shopData.id || '',
  574. mid: this.scenicId,
  575. shopId: this.storeId,
  576. typeId: this.typeId,
  577. name: name,
  578. customGroupId: this.lineId,
  579. saleRule: this.showoperat,
  580. saleRuleJson: JSON.stringify(astrictDate),
  581. describ: this.mastKnow,
  582. icon: this.Icon || '',
  583. del: this.shopData.del || '',
  584. upDown: this.shopData.upDown || ''
  585. })
  586. .then((res) => {
  587. if (res.code === 200 && res.msg === 'OK') {
  588. if (this.shopData.id) {
  589. this.$mHelper.toast('保存成功,请联系管理员进行审核');
  590. } else {
  591. this.$mHelper.toast('添加成功');
  592. }
  593. this.loading = false;
  594. setTimeout(() => {
  595. this.$mRouter.back();
  596. }, 500);
  597. }
  598. });
  599. },
  600. },
  601. };
  602. </script>
  603. <style lang="scss" scoped>
  604. .shopdetail {
  605. .shopdetail-content {
  606. padding: 24upx 0 0upx;
  607. .detail-list {
  608. padding: 0 33upx;
  609. background-color: #ffffff;
  610. border-bottom: 1px solid #e7e7e7;
  611. box-sizing: border-box;
  612. .menu {
  613. display: flex;
  614. justify-content: space-between;
  615. align-items: center;
  616. height: 93upx;
  617. .uni-list-cell {
  618. width: 100%;
  619. display: flex;
  620. align-items: center;
  621. height: 93upx;
  622. .uni-list-cell-db {
  623. height: 100%;
  624. display: flex;
  625. justify-content: space-between;
  626. align-items: center;
  627. .selectlist {
  628. width: 100%;
  629. }
  630. }
  631. }
  632. .title {
  633. font-size: 30upx;
  634. color: #a3a8a8;
  635. }
  636. .more {
  637. width: 15upx;
  638. height: 26upx;
  639. }
  640. .bigtitle {
  641. font-size: 34upx;
  642. color: #232828;
  643. font-weight: 700;
  644. }
  645. .input-shopname {
  646. width: 100%;
  647. height: 100%;
  648. }
  649. .txt {
  650. color: #a95cff;
  651. font-weight: 700;
  652. }
  653. .linetitle {
  654. color: #232828;
  655. }
  656. .astricttitle {
  657. font-weight: 700;
  658. font-size: 32upx;
  659. color: #232828;
  660. }
  661. }
  662. }
  663. .noborder {
  664. border-bottom: none;
  665. }
  666. .classify {
  667. background-color: #f9f9f9;
  668. }
  669. .idastrict {
  670. background-color: #fff;
  671. }
  672. .operat {
  673. background-color: #f9f9f9;
  674. .menu {
  675. .title {
  676. font-size: 28upx;
  677. color: #232828;
  678. }
  679. .sub,
  680. .add {
  681. width: 44upx;
  682. height: 44upx;
  683. border-radius: 50%;
  684. border: 1px solid #b4b8b7;
  685. color: #b4b8b7;
  686. text-align: center;
  687. line-height: 40upx;
  688. font-weight: 700;
  689. }
  690. .txt {
  691. color: #232828;
  692. font-weight: normal;
  693. }
  694. .unit {
  695. color: #232828;
  696. }
  697. }
  698. }
  699. .shopicon {
  700. height: 100upx;
  701. padding: 0 33upx;
  702. font-size: 32upx;
  703. color: #232828;
  704. font-weight: 700;
  705. line-height: 100upx;
  706. }
  707. .iconcontent {
  708. padding: 25upx 33upx;
  709. background-color: #f9f9f9;
  710. display: flex;
  711. align-items: center;
  712. .icon {
  713. display: inline-block;
  714. height: 56upx;
  715. font-size: 28upx;
  716. color: #a3a8a8;
  717. border-radius: 50%;
  718. margin-left: 20upx;
  719. border: 1px dashed #ccc;
  720. border-radius: 5%;
  721. text-align: center;
  722. line-height: 56upx;
  723. padding: 0 15upx;
  724. }
  725. .shopLogo {
  726. width: 56upx;
  727. height: 56upx;
  728. border-radius: 50%;
  729. }
  730. }
  731. .uploading {
  732. padding: 25upx 33upx;
  733. display: flex;
  734. align-items: center;
  735. flex-wrap: wrap;
  736. background-color: #fff;
  737. .item-warp {
  738. border-radius: 17upx;
  739. margin-right: 15upx;
  740. margin-bottom: 15upx;
  741. box-sizing: border-box;
  742. overflow: hidden;
  743. .img-warp {
  744. position: relative;
  745. }
  746. .item {
  747. width: 160upx;
  748. height: 160upx;
  749. }
  750. &:nth-child(4) {
  751. margin-right: 0;
  752. }
  753. .delete {
  754. position: absolute;
  755. right: -35upx;
  756. top: -35upx;
  757. width: 70upx;
  758. height: 70upx;
  759. border-radius: 50%;
  760. background-color: #8064f7;
  761. .delete-icon {
  762. position: absolute;
  763. left: 13upx;
  764. bottom: 13upx;
  765. width: 14upx;
  766. height: 14upx;
  767. }
  768. }
  769. }
  770. }
  771. .know {
  772. padding: 24upx 33upx;
  773. background-color: #fff;
  774. #editor {
  775. width: 100%;
  776. height: 300px;
  777. }
  778. }
  779. .btn {
  780. width: 100%;
  781. height: 98upx;
  782. color: #ffffff;
  783. font-size: 32upx;
  784. text-align: center;
  785. line-height: 98upx;
  786. background-color: #8064f7;
  787. margin-top: 27upx;
  788. letter-spacing: 2upx;
  789. }
  790. }
  791. }
  792. </style>