bindData.vue 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. <template>
  2. <div>
  3. <el-tabs v-model="activeName">
  4. <el-tab-pane label="绑定数据字段" name="first"></el-tab-pane>
  5. <el-tab-pane label="数据集" name="second"></el-tab-pane>
  6. </el-tabs>
  7. <div v-if="activeName === 'first'">
  8. <div v-for="(item,idx) in panels" :key="idx" class="mt-10">
  9. <div v-if="item.printElementType.type === 'text'">
  10. <p class="preview__item">{{item.options.title}}</p>
  11. <el-select size="mini" v-model="item.options.sys_printdatasetid" placeholder="请选择" @click.native="act_DataBaseID = idx" @change="queryDataBaseDetail">
  12. <el-option
  13. v-for="i in databastlist"
  14. :key="i.sys_printdatasetid"
  15. :label="i.datasetname"
  16. :value="i.sys_printdatasetid">
  17. </el-option>
  18. </el-select>&nbsp;
  19. <el-select size="mini" v-model="item.options.field" :disabled="idx !== act_DataBaseID" placeholder="请选择" @change="onChange">
  20. <el-option
  21. v-for="i in sys_printdataset"
  22. :key="i.sys_printdataset_columnsid"
  23. :label="i.column_name"
  24. :value="i.column_name"
  25. @visible-change="visibleChange">
  26. </el-option>
  27. </el-select>
  28. </div>
  29. <div v-if="item.printElementType.type === 'table'">
  30. <p style="font-size:12px">表格数据</p>
  31. <div>
  32. <div v-for="td in item.options.columns[0]" :key="td.index">
  33. <p class="preview__item">{{td.title}}</p>
  34. <el-select size="mini" v-model="item.options.sys_printdatasetid" placeholder="请选择" @click.native="act_DataBaseID = idx" @change="queryDataBaseDetail">
  35. <el-option
  36. v-for="i in databastlist"
  37. :key="i.sys_printdatasetid"
  38. :label="i.datasetname"
  39. :value="i.sys_printdatasetid">
  40. </el-option>
  41. </el-select>&nbsp;
  42. <el-select size="mini" v-model="item.options.field" :disabled="idx !== act_DataBaseID" placeholder="请选择" @change="onChange">
  43. <el-option
  44. v-for="i in sys_printdataset"
  45. :key="i.sys_printdataset_columnsid"
  46. :label="i.column_name"
  47. :value="i.column_name"
  48. @visible-change="visibleChange">
  49. </el-option>
  50. </el-select>
  51. </div>
  52. </div>
  53. </div>
  54. </div>
  55. <el-button type="primary" size="mini" @click="saveJson">保 存</el-button>
  56. </div>
  57. <div v-else>
  58. <div v-for="item in databastlist" :key="item.index" @click="queryDataBaseDetail(item.sys_printdatasetid)">{{item.datasetname}}</div>
  59. <div>
  60. <el-input style="margin-bottom:10px" size="small" v-model="database.datasetname" placeholder="请输入数据集名称"></el-input>
  61. <el-input size="small" type="textarea" v-model="database.sqlstr" placeholder="请输入sql语句" :autosize="{ minRows: 3, maxRows: 6 }"></el-input>
  62. </div>
  63. <el-button type="primary" size="small" @click="saveDatabase">保存</el-button>
  64. </div>
  65. </div>
  66. </template>
  67. <script>
  68. export default {
  69. props:['temp'],
  70. computed:{
  71. formComponent(){
  72. if (this.dialogFormVisible) {
  73. return ()=>import(`@/style/sv-print.css`)
  74. } else {
  75. return
  76. }
  77. }
  78. },
  79. data () {
  80. return {
  81. activeName:'first',
  82. template:{},
  83. panels:{},
  84. databastlist:[],
  85. sys_printdataset:[],
  86. databastlist:[],
  87. act_DataBaseID:null,
  88. modeData:{},
  89. database:{}
  90. }
  91. },
  92. methods:{
  93. onDesigned () {},
  94. async queryMode (id) {
  95. this.show = false
  96. const res = await this.$api.requested({
  97. "id": 20221121155901,
  98. "content": {
  99. "sys_printmodelid":id
  100. }
  101. })
  102. this.modeData = res.data
  103. this.panels = JSON.parse(res.data.modeljson).panels[0].printElements
  104. this.template = JSON.parse(res.data.modeljson)
  105. this.show = true
  106. },
  107. async saveJson () {
  108. const res = await this.$api.requested({
  109. "id": 20221121160001,
  110. "content": {
  111. "sys_printmodelid": this.modeData.sys_printmodelid,
  112. "systemappid":this.modeData.systemappid,
  113. "modelname":this.modeData.modelname,
  114. "modeljson":this.template,
  115. "isused":this.modeData.isused
  116. }
  117. })
  118. },
  119. async saveDatabase () {
  120. this.database.sys_printmodelid = this.modeData.sys_printmodelid
  121. const res = await this.$api.requested({
  122. "id": 20221121160301,
  123. "content": this.database,
  124. })
  125. },
  126. queryDataBaseDetail () {},
  127. onChange () {},
  128. onClose () {
  129. this.$emit('onClose')
  130. },
  131. },
  132. watch:{
  133. temp (val) {
  134. this.template = JSON.parse(val)
  135. this.panels = this.template.panels[0].printElements
  136. }
  137. },
  138. mounted () {
  139. var _this = this;
  140. document.onkeydown = function(e) {
  141. let key = window.event.keyCode;
  142. if (key == 83 && event.ctrlKey) {
  143. // _this.template = JSON.parse(localStorage.getItem('sv-print-preferences'))['default-template']
  144. // _this.panels = _this.template.panels[0].printElements
  145. // _this.saveJson()
  146. }
  147. };
  148. }
  149. }
  150. </script>
  151. <style scoped>
  152. .preview{
  153. position: fixed;
  154. min-height: 600px;
  155. width: 550px;
  156. top:10px;
  157. right:30px;
  158. z-index: 99;
  159. background: #fff;
  160. box-shadow: 0 2px 4px #0000004d;
  161. padding: 10px;
  162. }
  163. .preview__item{
  164. position: relative;
  165. font-size: 12px;
  166. line-height: 30px;
  167. }
  168. .preview__item__table{
  169. display: flex;
  170. align-items: center;
  171. margin-bottom: 10px;
  172. }
  173. .preview__item__table p{
  174. flex: 1;
  175. width:80px ;
  176. border: 1px solid #f1f2f3;
  177. font-size: 12px;
  178. text-align: center;
  179. line-height: 30px;
  180. margin-left: -1px;
  181. }
  182. </style>