saveSemanticDialog.vue 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. <template>
  2. <div class="save-semantic-dialog">
  3. <el-dialog
  4. :title="dlgTitle"
  5. :visible.sync="isSaveFileShow"
  6. :close-on-click-modal="false"
  7. :modal-append-to-body="false"
  8. @close="closeDialog"
  9. v-dialogDrag
  10. width="40%" center
  11. >
  12. <div class="dialog-container dialog-loading-target">
  13. <template v-if="step===1">
  14. <el-form
  15. ref="formRef"
  16. label-position="left"
  17. hide-required-asterisk
  18. label-width="168px"
  19. :model="form"
  20. >
  21. <el-form-item :label="`${$t('SemanticsManage.DocumentComparison.semantic_analysis_name')}`" prop="Title">
  22. <el-input
  23. v-model="form.Title"
  24. style="width: 240px"
  25. :placeholder="$t('SemanticsManage.DocumentComparison.semantic_analysis_name_input')"
  26. />
  27. </el-form-item>
  28. <el-form-item :label="`${$t('SemanticsManage.DocumentComparison.select_category')}`" prop="ClassifyId">
  29. <el-select :placeholder="$t('SemanticsManage.DocumentComparison.please_select_category')" v-model="form.ClassifyId">
  30. <el-option
  31. v-for="item in classifyList" :key="item.SaCompareClassifyId"
  32. :label="item.ClassifyName"
  33. :value="item.SaCompareClassifyId"
  34. />
  35. </el-select>
  36. </el-form-item>
  37. <el-form-item :label="$t('SemanticsManage.DocumentComparison.preview_results')">
  38. <el-radio-group v-model="previewPic">
  39. <el-radio label="是">{{$t('SemanticsManage.DocumentComparison.radio_yes')}}</el-radio>
  40. <el-radio label="否">{{$t('SemanticsManage.DocumentComparison.radio_no')}}</el-radio>
  41. </el-radio-group>
  42. </el-form-item>
  43. </el-form>
  44. </template>
  45. <template v-else>
  46. <div class="form-item">
  47. {{$t('SemanticsManage.DocumentComparison.upload_result_image')}}:
  48. <el-radio-group v-model="uploadPic">
  49. <el-radio label="是">{{$t('SemanticsManage.DocumentComparison.radio_yes')}}</el-radio>
  50. <el-radio label="否">{{$t('SemanticsManage.DocumentComparison.radio_no')}}</el-radio>
  51. </el-radio-group>
  52. </div>
  53. <div class="preview-wrap">
  54. <canvas-table
  55. ref="canvasTable"
  56. :tableImgData="resultData"
  57. />
  58. </div>
  59. </template>
  60. </div>
  61. <div class="foot-container">
  62. <el-button type="primary" @click="toNextStep">{{$t('Dialog.confirm_btn')}}</el-button>
  63. <el-button @click.stop="closeDialog">{{$t('Dialog.cancel_btn')}}</el-button>
  64. </div>
  65. </el-dialog>
  66. </div>
  67. </template>
  68. <script>
  69. import canvasTable from '../../components/canvasTable.vue';
  70. import {semanticInterface} from '@/api/modules/semanticsApi.js';
  71. export default {
  72. components: { canvasTable },
  73. props:{
  74. isSaveFileShow:{
  75. type:Boolean,
  76. default:false
  77. },
  78. semanticInfo:{//当前语义分析的一些信息
  79. type:Object,
  80. default:()=>{
  81. return {}
  82. }
  83. },
  84. saveType:{//是点的保存还是另存为
  85. type:Number,
  86. default:0 //0另存为 1为保存
  87. },
  88. resultData:{//保存结果
  89. type:Object,
  90. default:()=>{
  91. return {}
  92. }
  93. },
  94. dialogLoading:{//loading
  95. type:Boolean,
  96. default:false
  97. }
  98. },
  99. watch:{
  100. isSaveFileShow(val){
  101. if(val){
  102. this.step = 1
  103. this.getClassifyList()
  104. this.form = _.cloneDeep(this.semanticInfo)
  105. this.form.previewPic = this.previewPic?this.previewPic:'是'
  106. this.form.uploadPic = this.uploadPic?this.uploadPic:'是'
  107. if(this.saveType===0){
  108. this.form.Title = this.form.Title + '(1)'
  109. }
  110. }
  111. },
  112. dialogLoading(val){
  113. //console.log('dialogVal',val)
  114. if(val){
  115. this.loading = this.$loading({
  116. lock: true,
  117. text: this.$t('SemanticsManage.DocumentComparison.generating_result_image'),
  118. spinner: 'el-icon-loading',
  119. customClass:'loading',
  120. target:document.querySelector('.dialog-loading-target'),
  121. background: 'rgba(255, 255, 255, 0.8)'
  122. });
  123. }else{
  124. this.loading&&this.loading.close()
  125. }
  126. },
  127. previewPic(val){
  128. this.form.previewPic = val
  129. },
  130. uploadPic(val){
  131. this.form.uploadPic = val
  132. }
  133. },
  134. data() {
  135. return {
  136. step:1,//步骤数 1为保存/另存为图片 2为上传结果图
  137. classifyList:[],//语义分析分类列表
  138. previewPic:'是',
  139. uploadPic:'是',
  140. canvasTableData:[],
  141. loading:null,
  142. form:{}
  143. };
  144. },
  145. methods: {
  146. getClassifyList(){
  147. semanticInterface.getClassifyList().then(res=>{
  148. if(res.Ret!==200) return
  149. this.classifyList = res.Data||[]
  150. })
  151. },
  152. async toNextStep(){
  153. if(this.step===1){
  154. if(!this.checkForm()) return
  155. await this.saveSemantic()
  156. return
  157. }
  158. if(this.step===2){
  159. this.uploadPic==='是'&&await this.uploadImg()
  160. this.uploadPic==='否'&&this.closeDialog('toList')
  161. return
  162. }
  163. },
  164. goNext(){
  165. if(this.step===1){
  166. this.previewPic==='是'
  167. ?this.step++
  168. :this.closeDialog('toList')
  169. }
  170. },
  171. checkForm(){
  172. const {Title,ClassifyId} = this.form
  173. if(!Title){
  174. this.$message.warning(this.$t('SemanticsManage.DocumentComparison.semantic_analysis_name_input'))
  175. return false
  176. }
  177. if(!ClassifyId){
  178. this.$message.warning(this.$t('SemanticsManage.DocumentComparison.please_select_category'))
  179. return false
  180. }
  181. return true
  182. },
  183. saveSemantic(){
  184. this.$emit('saveSemantic',this.form)
  185. },
  186. async uploadImg(){
  187. let imgData = await this.$refs.canvasTable.tableToCanvas()
  188. this.$emit('uploadImg',imgData)
  189. },
  190. closeDialog(type){
  191. //console.log('dialog Type',type)
  192. this.$emit('close',type)
  193. }
  194. },
  195. computed:{
  196. dlgTitle() {
  197. return this.saveType===0 ? this.$t('Table.save_as'): this.$t('Dialog.confirm_save_btn')
  198. }
  199. }
  200. };
  201. </script>
  202. <style scoped lang="scss">
  203. .save-semantic-dialog{
  204. .preview-wrap{
  205. margin-top:20px;
  206. }
  207. .foot-container{
  208. margin-top:15px;
  209. text-align: center;
  210. padding-bottom: 40px;
  211. }
  212. }
  213. </style>