edit.php 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735
  1. <?php
  2. use common\helpers\ComponentHelper;
  3. ComponentHelper::loadComponentView('com-select-cat');
  4. ComponentHelper::loadComponentView('com-dialog-select');
  5. ComponentHelper::loadComponentView('com-rich-text');
  6. ComponentHelper::loadComponentView('com-image');
  7. ComponentHelper::loadComponentView('com-rich-text');
  8. ?>
  9. <script src="/resources/js/Sortable.min.js"></script>
  10. <script src="/resources/unpkg/vuedraggable@2.18.1/dist/vuedraggable.umd.min.js"></script>
  11. <div id="app" v-cloak>
  12. <el-card class="box-card" shadow="never" style="border:0;min-width: 1200px;"
  13. body-style="background-color: #f3f3f3;padding: 10px 0 0;">
  14. <div slot="header">
  15. <el-breadcrumb separator="/">
  16. <el-breadcrumb-item>
  17. <span style="color: #409EFF;cursor: pointer"
  18. @click="$navigate({r:'business-card/material/index'})">
  19. 素材中心
  20. </span>
  21. </el-breadcrumb-item>
  22. <el-breadcrumb-item>{{titleName}}</el-breadcrumb-item>
  23. </el-breadcrumb>
  24. </div>
  25. <div class="form-body" v-loading="loading">
  26. <el-form :model="submitData" :rules="rules" ref="ruleForm" size="small" label-width="150px" style="margin-left: 20px;">
  27. <el-form-item label="素材标题" prop="title" style="margin-bottom: 20px;" label-width="100px">
  28. <el-input placeholder="请输入素材标题" type="text" v-model="submitData.title"></el-input>
  29. </el-form-item>
  30. <el-form-item prop="intro" label="素材简介" style="margin-bottom: 20px;" label-width="100px">
  31. <el-input placeholder="请输入素材简介" type="textarea" v-model="submitData.intro"></el-input>
  32. </el-form-item>
  33. <el-form-item label="分类" style="margin-bottom: 20px" required label-width="100px">
  34. <el-select v-model="submitData.cate_id" placeholder="请选择分类">
  35. <el-option v-for="(item, index) in cateList" :label="item.name" :value="item.id" :key="index"></el-option>
  36. </el-select>
  37. </el-form-item>
  38. <el-form-item label="是否展示" style="margin-bottom: 20px" label-width="100px">
  39. <el-switch
  40. v-model="submitData.is_show"
  41. :active-value="1"
  42. :inactive-value="0"
  43. >
  44. </el-switch>
  45. </el-form-item>
  46. <el-form-item label="素材格式" style="margin-bottom: 20px" label-width="100px">
  47. <el-radio v-model="submitData.ext_type" v-for="(type, keys) in material_ext_type" :label="keys" :key="keys">{{type}}</el-radio>
  48. </el-form-item>
  49. <el-form-item label="分享标题" prop="share_title" style="margin-bottom: 20px;" label-width="100px">
  50. <el-input placeholder="请输入分享标题" type="text" v-model="submitData.share_title"></el-input>
  51. </el-form-item>
  52. <el-form-item label="分享描述" prop="share_desc" style="margin-bottom: 20px;padding: 10px;" label-width="100px">
  53. <el-input placeholder="请输入分享描述" type="textarea" v-model="submitData.share_desc" maxlength="80"></el-input>
  54. </el-form-item>
  55. <el-form-item prop="cover_img" label-width="100px" >
  56. <label slot="label">
  57. <span>封面图片</span>
  58. <!-- <el-tooltip effect="dark" content="展示封面,建议尺寸比例 1:1" placement="top">-->
  59. <!-- <i class="el-icon-info"></i>-->
  60. <!-- </el-tooltip>-->
  61. </label>
  62. <com-attachment @input="getSelImg" :multiple="true" :max="1">
  63. <el-button size="mini">选择图片</el-button> <span style="color: #BBBBBB;margin-left: 5px;">建议尺寸比例 100px*100px</span>
  64. </com-attachment>
  65. <div class="customize-share-title" v-if="submitData.cover_img">
  66. <com-image mode="aspectFill" width='80px' height='80px' :src="submitData.cover_img"></com-image>
  67. <!-- <el-button class="del-btn" size="mini" type="danger" icon="el-icon-close" circle @click="delSelImg()"></el-button>-->
  68. </div>
  69. </el-form-item>
  70. <el-form-item v-if="submitData.ext_type == 'video'" label="素材视频" prop="material_link" style="margin-bottom: 20px" required label-width="100px">
  71. <com-attachment :multiple="false" :max="1" @selected="videoUrl" type="videos">
  72. <el-tooltip class="item" effect="dark" content="支持格式mp4,支持编码H.264" placement="top">
  73. <el-button size="mini">选择视频</el-button>
  74. </el-tooltip>
  75. </com-attachment>
  76. <video v-if="submitData.material_link" :src="submitData.material_link" controls="controls" width="200" style="margin-top: 10px;"></video>
  77. <el-input type="text" placeholder="请输入视频链接" v-model="submitData.material_link" maxlength="200"></el-input>
  78. </el-form-item>
  79. <el-form-item v-if="submitData.ext_type == 'pdf'" label="素材文件" prop="material_link" style="margin-bottom: 20px" required label-width="100px">
  80. <com-attachment :multiple="false" :max="1" @selected="pdfUrl" type="files">
  81. <el-tooltip class="item" effect="dark" content="支持格式PDF" placement="top">
  82. <el-button size="mini">选择素材文件</el-button>
  83. </el-tooltip>
  84. </com-attachment>
  85. <a :href="submitData.material_link" v-if="submitData.material_link" target="_blank">点击查看: {{link_title}}</a>
  86. </el-form-item>
  87. <!-- <el-form-item v-if="submitData.ext_type == 'pdf'" label="PDF文件" prop="material_link" style="margin-bottom: 20px" required label-width="100px">-->
  88. <!-- <input ref="input" type="file" accept="application/pdf"-->
  89. <!-- @change="handleUploadPdf" style="display: none;" id="uploadpdf"/>-->
  90. <!-- <el-button @click="uploadpdf">上传文件</el-button>-->
  91. <!-- <div><a v-if="submitData.material_cont" @click="previewPdf">点击预览</a></div>-->
  92. <!-- </el-form-item>-->
  93. <el-form-item v-if="submitData.ext_type == 'link'" label="连接地址" prop="material_link" style="margin-bottom: 20px" required label-width="100px">
  94. <el-input v-model="submitData.material_link" style="margin-top: 10px;" placeholder="请输入连接地址"></el-input>
  95. </el-form-item>
  96. <el-form-item v-show="submitData.ext_type == 'pic_text'" label="内容编辑" label-width="100px" required>
  97. <com-rich-text style="width: 750px" :simple-attachment="true" v-model="submitData.material_cont"></com-rich-text>
  98. </el-form-item>
  99. </div>
  100. <el-button class="button-item" :loading="btnLoading" type="primary" @click="saveFun"
  101. size="small">保存
  102. </el-button>
  103. </el-card>
  104. </div>
  105. <script>
  106. const app = new Vue({
  107. el: '#app',
  108. data() {
  109. return {
  110. diy_img_prefix: '<?= Yii::getAlias('@attachurl') ?>',
  111. titleName:"添加名片素材",
  112. loading:false,
  113. foundLoading:false,
  114. keyword_name: '',
  115. keyword_id: '',
  116. keyword_mobile: '',
  117. video_type:[".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
  118. ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid"],
  119. submitData:{
  120. id: null,
  121. user_id: 0,
  122. title: "",
  123. intro: "",
  124. cate_id: null,
  125. is_show: 1,
  126. ext_type: 'pic_text',
  127. share_title: '',
  128. share_desc: '',
  129. cover_img: '',
  130. material_link: '',
  131. material_cont: '',
  132. },
  133. rules: {
  134. title:[
  135. { required: true, message: '请标题必填', trigger: 'blur' }
  136. ],
  137. intro:[
  138. { required: true, message: '请输入素材简介', trigger: 'blur' }
  139. ],
  140. // share_title:[
  141. // { required: true, message: '请输入分享标题', trigger: 'blur' }
  142. // ],
  143. // share_desc:[
  144. // { required: true, message: '请输入分享描述', trigger: 'blur' }
  145. // ],
  146. cover_img:[
  147. { required: true, message: '请选择封面图片', trigger: 'blur' }
  148. ],
  149. cate_id: [
  150. { required: true, message: '请选择分类1', trigger: 'blur' }
  151. ],
  152. },
  153. btnLoading:false,
  154. cateList: [],
  155. material_ext_type: [],
  156. pdfBase64: null
  157. };
  158. },
  159. mounted() {
  160. // this.submitData.updated_at = Date.parse(new Date()) / 1000; // 新建数据的更新时间
  161. if (getQuery('id')) {
  162. this.titleName="编辑名片素材";
  163. this.loadData(getQuery('id'));
  164. } else {
  165. // this.submitData.created_at = Date.parse(new Date()) / 1000; // 新建数据的创建时间
  166. }
  167. this.getExtType();
  168. this.getCate();
  169. },
  170. watch:{
  171. },
  172. computed:
  173. {
  174. link_title() {
  175. let arr = this.submitData.material_link.split('/');
  176. let title = arr.pop();
  177. return title ? title : '';
  178. }
  179. },
  180. methods: {
  181. uploadpdf() {
  182. $('#uploadpdf').click();
  183. },
  184. handleUploadPdf(e) {
  185. let file = e.target.files[0];
  186. console.log('file', file)
  187. let that = this;
  188. let reader = new FileReader();
  189. reader.readAsDataURL(file);
  190. reader.onload = (event) => {
  191. console.log('event', event)
  192. let base64 = event.target.result;
  193. that.pdfBase64 = base64;
  194. that.submitData.material_cont = base64;
  195. }
  196. },
  197. previewPdf() {
  198. const blob = this.base64ToBlob(this.submitData.material_cont);
  199. const file = this.blobToFile(blob, 'pdf预览');
  200. let url = URL.createObjectURL(file);
  201. window.open(url);
  202. },
  203. base64ToBlob(base64Data) {
  204. let arr = base64Data.split(','),
  205. fileType = arr[0].match(/:(.*?);/)[1],
  206. bstr = atob(arr[1]),
  207. l = bstr.length,
  208. u8Arr = new Uint8Array(l);
  209. while (l--) {
  210. u8Arr[l] = bstr.charCodeAt(l);
  211. }
  212. return new Blob([u8Arr], {
  213. type: fileType
  214. });
  215. },
  216. blobToFile(newBlob, fileName) {
  217. newBlob.lastModifiedDate = new Date();
  218. newBlob.name = fileName;
  219. return newBlob;
  220. },
  221. getCate() {
  222. request({
  223. params: {
  224. r: 'business-card/material/cate-list'
  225. }
  226. }).then(e=>{
  227. if (e.data.code == 0) {
  228. this.cateList = e.data.data;
  229. }
  230. }).catch(e=>{
  231. })
  232. },
  233. getSelImg(val){
  234. console.info(val);
  235. this.submitData.cover_img = val[0];
  236. },
  237. delSelImg(){
  238. //this.submitData.cover_img.splice(index, 1);
  239. this.submitData.cover_img = '';
  240. },
  241. videoUrl(e) {
  242. if (e.length) {
  243. //this.submitData.material_link = e[0].url;
  244. this.$set(this.submitData, 'material_link', e[0].url);
  245. }
  246. console.log(e[0]);
  247. // console.log(this.submitData);
  248. this.$forceUpdate();
  249. },
  250. pdfUrl(e) {
  251. console.log(e[0]);
  252. if (e.length) {
  253. //this.submitData.material_link = e[0].url;
  254. this.$set(this.submitData, 'material_link', e[0].url);
  255. // console.log(this.submitData.material_link)
  256. }
  257. },
  258. viewPdf() {
  259. window.open(
  260. this.submitData.material_link
  261. )
  262. },
  263. getUser() {
  264. let self = this;
  265. self.userDialog.loading = true;
  266. request({
  267. params: {
  268. r: 'business-bonus/default/search-user',
  269. page: self.userDialog.page,
  270. keyword_name: this.keyword_name,
  271. keyword_id: this.keyword_id,
  272. keyword_mobile: this.keyword_mobile,
  273. type:this.userDialog.index,
  274. },
  275. method: 'get',
  276. }).then(e => {
  277. self.userDialog.loading = false;
  278. self.userDialog.list = e.data.data.list;
  279. self.userDialog.pagination = e.data.data.pagination;
  280. }).catch(e => {
  281. console.log(e);
  282. });
  283. },
  284. addUser()
  285. {
  286. if (this.userDialog.selectedList && this.userDialog.selectedList.length > 1) {
  287. this.$message.error('只能选择一个用户!');
  288. return false;
  289. }
  290. this.submitData.nickname = this.userDialog.selectedList[0].nickname;
  291. this.submitData.user_id = this.userDialog.selectedList[0].id;
  292. this.submitData.mobile = this.userDialog.selectedList[0].mobile;
  293. this.submitData.avatar_url = this.userDialog.selectedList[0].avatar_url;
  294. this.userDialog.visible = false;
  295. },
  296. userSelectionChange(e) {
  297. if (e.length > 1) {
  298. this.$message.error('只能选择一个用户!');
  299. }
  300. this.userDialog.selectedList = e;
  301. },
  302. userDialogPageChange(page) {
  303. this.userDialog.page = page;
  304. this.getUser();
  305. },
  306. showUserDialog(index) {
  307. this.userDialog.visible = true;
  308. this.userDialog.index = index;
  309. },
  310. //检验必填选项
  311. check_centent(){
  312. if (!this.submitData.cate_id) {
  313. this.$message.error('请选择分类!');
  314. return false;
  315. }
  316. if(this.submitData.ext_type == 'pic_text'){
  317. if(!this.submitData.material_cont){
  318. this.$message.error('请输入内容!');
  319. return false;
  320. }
  321. }else if(this.submitData.ext_type == 'video'){
  322. if(!this.submitData.material_link){
  323. this.$message.error('请上传视频!');
  324. return false;
  325. }
  326. //console.log(this.video_type.lenght(),6666666);
  327. for(var i=0; i<this.video_type.length;i++){
  328. console.log(this.video_type[i],6666666);
  329. if(this.submitData.material_link.indexOf(this.video_type[i])>-1){
  330. return true;
  331. }
  332. }
  333. this.$message.error('视频格式不对,请上传视频!');
  334. return false;
  335. }else if(this.submitData.ext_type == 'pdf'){
  336. if(!this.submitData.material_link){
  337. this.$message.error('请上传PDF!');
  338. }else if(this.submitData.material_link.indexOf('.pdf')>-1){
  339. return true;
  340. }else{
  341. this.$message.error('文件格式不对,请上传PDF文件!');
  342. }
  343. /*if(!this.submitData.material_cont){
  344. this.$message.error('请上传PDF!');
  345. }else if(this.submitData.material_cont.indexOf('data:application/pdf;')>-1){
  346. return true;
  347. }else{
  348. this.$message.error('文件格式不对,请上传PDF文件!');
  349. }*/
  350. return false;
  351. }else if(this.submitData.ext_type == 'link'){
  352. if(!this.submitData.material_link){
  353. this.$message.error('请填写连接!');
  354. }else if(this.submitData.material_link.indexOf('http://')>-1){
  355. return true;
  356. }else if(this.submitData.material_link.indexOf('https://')>-1){
  357. return true;
  358. }else{
  359. this.$message.error('连接格式不对,请填写连接!');
  360. }
  361. return false;
  362. }
  363. return true;
  364. },
  365. saveFun(){
  366. this.$refs['ruleForm'].validate((valid) => {
  367. if (valid) {
  368. if(!this.check_centent()){
  369. return false;
  370. }
  371. let data =JSON.parse(JSON.stringify(this.submitData));
  372. this.btnLoading = true;
  373. let url = 'business-card/material/edit';
  374. request({
  375. params: {
  376. r:url,
  377. },
  378. method: 'post',
  379. data: data
  380. }).then(e => {
  381. this.btnLoading = false;
  382. if (e.data.code == 0) {
  383. this.$message.success(e.data.msg);
  384. setTimeout(function () {
  385. navigateTo({
  386. r: 'business-card/material/index',
  387. });
  388. }, 1500);
  389. } else {
  390. this.$message.error(e.data.msg);
  391. }
  392. }).catch(e => {
  393. this.$message.error(e);
  394. this.btnLoading = false;
  395. })
  396. } else {
  397. this.$message.error('请填写必要的参数!');
  398. return false;
  399. }
  400. });
  401. },
  402. picUrl(e) {
  403. if (e.length) {
  404. this.submitData.pic = e[0].url;
  405. }
  406. },
  407. delPic(index) {
  408. /* this.pic_url.splice(index, 1) */
  409. this.submitData.pic = '';
  410. },
  411. receiveDatetimeChange(){
  412. if(this.receive_datetime){
  413. this.submitData.receive_begin_time = Date.parse(new Date(this.receive_datetime[0]).toString())/1000;
  414. this.submitData.receive_end_time = Date.parse(new Date(this.receive_datetime[1]).toString())/1000;
  415. }
  416. },
  417. useDatetimeChange() {
  418. if(this.use_datetime){
  419. this.submitData.use_begin_time = Date.parse(new Date(this.use_datetime[0]).toString())/1000;
  420. this.submitData.use_end_time = Date.parse(new Date(this.use_datetime[1]).toString())/1000;
  421. }
  422. },
  423. addPrize(){
  424. this.submitData.prize.push(JSON.parse(JSON.stringify(this.prizeObj)));
  425. },
  426. delPrize(index){
  427. this.submitData.prize.splice(index,1)
  428. },
  429. formatTime(timeStamp) {
  430. var date = new Date();
  431. date.setTime(timeStamp * 1000);
  432. var y = date.getFullYear();
  433. var m = date.getMonth() + 1;
  434. m = m < 10 ? ('0' + m) : m;
  435. var d = date.getDate();
  436. d = d < 10 ? ('0' + d) : d;
  437. var h = date.getHours();
  438. h = h < 10 ? ('0' + h) : h;
  439. var minute = date.getMinutes();
  440. var second = date.getSeconds();
  441. minute = minute < 10 ? ('0' + minute) : minute;
  442. second = second < 10 ? ('0' + second) : second;
  443. return y + '-' + m + '-' + d + ' ' + h + ':' + minute + ':' + second;
  444. },
  445. loadData(id){
  446. this.loading = true;
  447. request({
  448. params: {
  449. r:'business-card/material/info',
  450. id: id
  451. },
  452. method: 'get',
  453. }).then(e => {
  454. this.loading = false;
  455. if (e.data.code == 0) {
  456. if (e.data.data.is_null == 0) {
  457. this.submitData = e.data.data.info;
  458. }
  459. } else {
  460. this.$message.error(e.data.msg);
  461. }
  462. }).catch(e => {
  463. this.loading = false;
  464. });
  465. },
  466. getExtType() {
  467. request({
  468. params: {
  469. r:'business-card/material/ext-type',
  470. },
  471. method: 'post',
  472. }).then(e => {
  473. if (e.data.code == 0) {
  474. this.material_ext_type = e.data.data;
  475. } else {
  476. this.$message.error(e.data.msg);
  477. }
  478. }).catch(e => {
  479. });
  480. }
  481. }
  482. });
  483. </script>
  484. <style>
  485. .form-body {
  486. padding: 20px;
  487. background-color: #fff;
  488. margin-bottom: 20px;
  489. padding-right: 20%;
  490. min-width: 900px;
  491. }
  492. .form-body .el-form-item {
  493. padding-right: 25%;
  494. min-width: 850px;
  495. }
  496. .form-button {
  497. margin: 0;
  498. }
  499. .form-button .el-form-item__content {
  500. margin-left: 0 !important;
  501. }
  502. .button-item {
  503. padding: 9px 25px;
  504. }
  505. .check-group {
  506. font-size: 14px !important;
  507. }
  508. .check-group .el-col {
  509. display: flex;
  510. }
  511. .check-group .el-input {
  512. margin: 0 5px;
  513. }
  514. .check-group .el-col .el-checkbox {
  515. display: flex;
  516. align-items: center;
  517. }
  518. .check-group .el-col .el-input {
  519. width: 100px;
  520. }
  521. .check-group .el-col .el-input .el-input__inner {
  522. height: 30px;
  523. width: 100px;
  524. }
  525. .el-checkbox-group .el-col {
  526. margin-bottom: 10px;
  527. }
  528. .add-image-btn {
  529. width: 100px;
  530. height: 100px;
  531. color: #419EFB;
  532. border: 1px solid #e2e2e2;
  533. cursor: pointer;
  534. }
  535. .remark {
  536. color: #cccccc;
  537. }
  538. .user-info img {
  539. width: 60px;
  540. border-radius: 50%;
  541. margin-top: 10px;
  542. }
  543. /*批量上传图片*/
  544. .pic-url-remark {
  545. font-size: 13px;
  546. color: #c9c9c9;
  547. margin-bottom: 12px;
  548. }
  549. .add-image-btn {
  550. width: 100px;
  551. height: 100px;
  552. color: #419EFB;
  553. border: 1px solid #e2e2e2;
  554. cursor: pointer;
  555. }
  556. .del-btn-pro{
  557. position: absolute;
  558. top: 28%;
  559. left: 57px;
  560. }
  561. .del-btn{
  562. position: absolute;
  563. top: -10%;
  564. right: -12%;
  565. z-index: 10;
  566. }
  567. .el-button--mini.is-circle{
  568. padding: 4px;
  569. }
  570. .priview-title{
  571. margin-bottom: 16px;
  572. font-size: 20px;
  573. font-weight: bold;
  574. color: #000000;
  575. }
  576. .priview-center{
  577. margin: 16px 11px;
  578. height: 86%;
  579. overflow-y: auto;
  580. }
  581. .preview-model{
  582. margin-right: 15px;
  583. background: #FFF;
  584. min-width: 375px;
  585. max-width: 375px;
  586. height: 78vh;
  587. overflow-wrap: anywhere;
  588. border-radius: 5px;
  589. }
  590. .form-right{
  591. flex: 1;
  592. overflow: auto;
  593. height: 78vh;
  594. }
  595. .card-model{
  596. border: 0;
  597. margin-bottom: 10px;
  598. }
  599. .customize-share-title{
  600. position: relative;
  601. display: inline-block;
  602. margin: 10px 10px 0 0;
  603. }
  604. .dp-header-placeholder {
  605. width: 100%;
  606. height: 44px;
  607. background-size: 100% 100%;
  608. z-index: 99;
  609. background: url("resources/img/decorate/nav/light1.png") no-repeat;
  610. }
  611. .preview-top-title{
  612. width: 100%;
  613. height: 24px;
  614. text-align: center;
  615. line-height: 24px;
  616. font-size: 16px;
  617. font-weight: 600;
  618. }
  619. /* 富文本表格样式 */
  620. .rich-text .note-app table {
  621. border-top: 1px solid #ccc;
  622. border-left: 1px solid #ccc;
  623. }
  624. .rich-text .note-app table th {
  625. background-color: #f1f1f1;
  626. }
  627. .rich-text .note-app table th,
  628. .rich-text .note-app table td {
  629. border-bottom: 1px solid #ccc;
  630. text-align: center;
  631. border-right: 1px solid #ccc;
  632. padding: 3px 5px;
  633. min-height: 30px;
  634. height: 30px;
  635. }
  636. .form-right::-webkit-scrollbar-thumb,.priview-center::-webkit-scrollbar-thumb{
  637. width: 4px;
  638. }
  639. textarea {
  640. padding: 8px !important;
  641. }
  642. </style>