MedicineInfoPg.vue 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  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. size:1,
  56. sizeError: () => {
  57. this.$message({
  58. showClose: true,
  59. message: '请上传 1M 以内的图片!',
  60. type: 'warning'
  61. })
  62. },
  63. action: config.urls.promptServer,
  64. response: (res) => {
  65. if(res.code=='0'){
  66. return config.imgHost+res.data.url;
  67. }else{
  68. this.$message({
  69. showClose: true,
  70. message: res.msg,
  71. type: 'warning'
  72. })
  73. }
  74. }
  75. },
  76. toolbar: {
  77. container: container,
  78. handlers: {
  79. 'image': function () {
  80. QuillWatch.emit(this.quill.id)
  81. }
  82. }
  83. }
  84. }
  85. },
  86. form:{
  87. position:[],
  88. orderNo:0
  89. },
  90. positions:[], //位置列表
  91. rules:{
  92. isReason: [
  93. { required: true, message: '请选择是否属于诊断', trigger: 'change' }
  94. ],
  95. position: [
  96. { required: true, message: '请选择显示位置', trigger: 'change' }
  97. ],
  98. title: [
  99. { required: true, message: '请输入段落标题', trigger: 'change' },
  100. { validator: (rule,value,callback)=>{
  101. if(value.length>30){
  102. callback(new Error('段落标题不能超过30字'));
  103. }else{
  104. callback();
  105. }}, trigger: 'change' }
  106. ],
  107. content: [
  108. { required: true, message: '请输入段落内容', trigger: 'change' }
  109. ],
  110. }
  111. }
  112. },
  113. watch:{
  114. 'data.content':function(){
  115. this.data.text = this.$refs.quillEditor.quill.root.innerText;
  116. }
  117. },
  118. mounted(){
  119. //显示位置枚举列表
  120. const pos = localStorage.getItem("knowledgeEnumsData");
  121. this.positions = JSON.parse(pos)&&JSON.parse(pos).positionTypeEnum;
  122. },
  123. methods:{
  124. reOrder(i){
  125. this.$emit("reOrder",i,this.index);
  126. },
  127. addEmit(){
  128. this.$emit("add");
  129. },
  130. delEmit(){
  131. this.$emit("del",this.index);
  132. },
  133. /*emitVal(){
  134. let data = this.form;
  135. let pst=this.form.position;
  136. const content = this.form.content.replace(config.imgHost,'{imageUrlPrefix}');
  137. const text = this.$refs.quillEditor;console.log(text)
  138. pst = typeof pst=='string'?pst:pst.join(',');
  139. data = Object.assign({},data,{
  140. position:this.form.position?pst:'',
  141. orderNo:this.index,
  142. text:'',
  143. content:content});
  144. this.$emit("change",this.index,data);
  145. }*/
  146. }
  147. }
  148. </script>
  149. <style lang="less">
  150. .is-error .el-form-item__error{
  151. top:auto;
  152. }
  153. .sub-form{
  154. position: relative;
  155. }
  156. .order-btn{
  157. position:absolute;
  158. top:40px;
  159. right:50px;
  160. a{
  161. display: block;
  162. margin-bottom: 20px;
  163. border: 1px solid #22ccc8;
  164. color: #22ccc8;
  165. padding: 5px 10px;
  166. border-radius: 4px;
  167. cursor: pointer;
  168. font-size: 12px;
  169. }
  170. .order-up{
  171. }
  172. }
  173. /**富文本编辑器样式修改***/
  174. .ql-snow .ql-picker.ql-size .ql-picker-label::before,
  175. .ql-snow .ql-picker.ql-size .ql-picker-item::before,
  176. .ql-snow .ql-picker.ql-header .ql-picker-label::before,
  177. .ql-snow .ql-picker.ql-header .ql-picker-item::before,
  178. .ql-snow .ql-picker.ql-font .ql-picker-label::before,
  179. .ql-snow .ql-picker.ql-font .ql-picker-item::before,
  180. .ql-snow .ql-color-picker .ql-picker-label svg,
  181. .ql-snow .ql-icon-picker .ql-picker-label svg{
  182. vertical-align: top;
  183. }
  184. </style>