MedicineInfoPg.vue 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. <template>
  2. <el-form :rules="rules" :model="data" ref="form" class="sub-form">
  3. <!--<el-input v-model="form.orderNo" :value="index" type="hidden"></el-input>-->
  4. <el-form-item label="显示位置:" prop="position" label-width="160px">
  5. <el-checkbox-group v-model="data.position">
  6. <el-checkbox v-for="it in positions" :key="it.key" :label="it.key">{{it.name}}</el-checkbox>
  7. </el-checkbox-group>
  8. </el-form-item>
  9. <el-form-item label="是否属于诊断依据:" prop="isReason" label-width="160px">
  10. <el-select v-model="data.isReason" placeholder="请选择">
  11. <el-option label="否" :value="0"></el-option>
  12. <el-option label="是" :value="1"></el-option>
  13. </el-select>
  14. </el-form-item>
  15. <el-form-item label="标题名称:" prop="title" label-width="160px">
  16. <el-input v-model="data.title"></el-input>
  17. </el-form-item>
  18. <el-form-item label="内容" prop="content" label-width="160px">
  19. <quillEditor v-model="data.content"
  20. :options="editorOption"
  21. class="ql-editor"
  22. ref="quillEditor"></quillEditor>
  23. </el-form-item>
  24. <div class="order-btn">
  25. <a v-if="index!==0" class="order-up" @click="reOrder(1)">上升</a>
  26. <a v-if="index!==total-1" class="order-down" @click="reOrder(0)">下降</a>
  27. </div>
  28. <el-form-item label-width="130px">
  29. <el-button @click="addEmit">添加段落</el-button>
  30. <el-button @click="delEmit" type="info">删除本段落</el-button>
  31. </el-form-item>
  32. </el-form>
  33. </template>
  34. <script>
  35. import 'quill/dist/quill.core.css'
  36. import 'quill/dist/quill.snow.css'
  37. import 'quill/dist/quill.bubble.css'
  38. import {quillEditor, Quill} from 'vue-quill-editor'
  39. import config from '@api/config';
  40. import {container, ImageExtend, QuillWatch} from 'quill-image-extend-module';
  41. Quill.register('modules/ImageExtend', ImageExtend);
  42. export default{
  43. props:['data','index','isEdit','total'],
  44. name:'MedicineInfoParagraph',
  45. components:{
  46. quillEditor
  47. },
  48. data(){
  49. return {
  50. editorOption: {
  51. modules: {
  52. ImageExtend: {
  53. loading: true,
  54. name: 'upfile',
  55. action: config.urls.promptServer,
  56. response: (res) => {
  57. return config.imgHost+res.url;
  58. }
  59. },
  60. toolbar: {
  61. container: container,
  62. handlers: {
  63. 'image': function () {
  64. QuillWatch.emit(this.quill.id)
  65. }
  66. }
  67. }
  68. }
  69. },
  70. form:{
  71. position:[],
  72. orderNo:0
  73. },
  74. positions:[], //位置列表
  75. rules:{
  76. isReason: [
  77. { required: true, message: '请选择是否属于诊断', trigger: 'change' }
  78. ],
  79. position: [
  80. { required: true, message: '请选择显示位置', trigger: 'change' }
  81. ],
  82. title: [
  83. { required: true, message: '请输入段落标题', trigger: 'change' },
  84. { validator: (rule,value,callback)=>{
  85. if(value.length>30){
  86. callback(new Error('段落标题不能超过30字'));
  87. }else{
  88. callback();
  89. }}, trigger: 'change' }
  90. ],
  91. content: [
  92. { required: true, message: '请输入段落内容', trigger: 'change' }
  93. ],
  94. }
  95. }
  96. },
  97. watch:{
  98. 'data.content':function(){
  99. this.data.text = this.$refs.quillEditor.quill.root.innerText;
  100. }
  101. },
  102. mounted(){
  103. //显示位置枚举列表
  104. const pos = localStorage.getItem("knowledgeEnumsData");
  105. this.positions = JSON.parse(pos)&&JSON.parse(pos).positionTypeEnum;
  106. },
  107. methods:{
  108. reOrder(i){
  109. this.$emit("reOrder",i,this.index);
  110. },
  111. addEmit(){
  112. this.$emit("add");
  113. },
  114. delEmit(){
  115. this.$emit("del",this.index);
  116. },
  117. /*emitVal(){
  118. let data = this.form;
  119. let pst=this.form.position;
  120. const content = this.form.content.replace(config.imgHost,'{imageUrlPrefix}');
  121. const text = this.$refs.quillEditor;console.log(text)
  122. pst = typeof pst=='string'?pst:pst.join(',');
  123. data = Object.assign({},data,{
  124. position:this.form.position?pst:'',
  125. orderNo:this.index,
  126. text:'',
  127. content:content});
  128. this.$emit("change",this.index,data);
  129. }*/
  130. }
  131. }
  132. </script>
  133. <style lang="less">
  134. .is-error .el-form-item__error{
  135. top:auto;
  136. }
  137. .sub-form{
  138. position: relative;
  139. }
  140. .order-btn{
  141. position:absolute;
  142. top:40px;
  143. right:50px;
  144. a{
  145. display: block;
  146. margin-bottom: 20px;
  147. border: 1px solid #22ccc8;
  148. color: #22ccc8;
  149. padding: 5px 10px;
  150. border-radius: 4px;
  151. cursor: pointer;
  152. font-size: 12px;
  153. }
  154. .order-up{
  155. }
  156. }
  157. /**富文本编辑器样式修改***/
  158. .ql-snow .ql-picker.ql-size .ql-picker-label::before,
  159. .ql-snow .ql-picker.ql-size .ql-picker-item::before,
  160. .ql-snow .ql-picker.ql-header .ql-picker-label::before,
  161. .ql-snow .ql-picker.ql-header .ql-picker-item::before,
  162. .ql-snow .ql-picker.ql-font .ql-picker-label::before,
  163. .ql-snow .ql-picker.ql-font .ql-picker-item::before,
  164. .ql-snow .ql-color-picker .ql-picker-label svg,
  165. .ql-snow .ql-icon-picker .ql-picker-label svg{
  166. vertical-align: top;
  167. }
  168. </style>