Bladeren bron

Merge remote-tracking branch 'origin/mergeBranch' into mergeBranch

qymljy 2 jaren geleden
bovenliggende
commit
f56a49b172

File diff suppressed because it is too large
+ 233 - 121
package-lock.json


+ 1 - 0
package.json

@@ -20,6 +20,7 @@
     "element-ui": "^2.15.6",
     "file-saver": "^2.0.5",
     "js-md5": "^0.7.3",
+    "less-loader": "^11.1.0",
     "nprogress": "^0.2.0",
     "script-loader": "^0.7.2",
     "vue": "^2.6.14",

+ 3 - 0
public/index.html

@@ -15,4 +15,7 @@
     <div id="app"></div>
     <!-- built files will be auto injected -->
   </body>
+ 
+
 </html>
+ 

+ 7 - 3
src/HManagement/accountManage/index.vue

@@ -69,14 +69,18 @@
         </p>
         <p v-else> {{scope.data.column.data[[scope.data.column.columnname]]}}</p>
       </template>
+      <template v-slot:tbOpreation="scope">
+        <print :dataid="scope.data.data.userid" :sys_printmodelid="22"></print>
+      </template>
     </basicLayout>
   </div>
 </template>
 
 <script>
-import downSelect from '@/components/down_select/index'
+import downSelect from '@/components/down_select/index.vue'
 import accountUse from './modules/useAccdount.vue'
 import accountUnuse from './modules/unuseAccount.vue'
+import print from '@/components/print/index.vue'
 export default {
   data () {
     return {
@@ -88,10 +92,10 @@ export default {
     }
   },
   components:{
-    // accountEdit,
+    print,
     accountUse,
     accountUnuse,
-    downSelect
+    downSelect,
   },
   methods:{
     onSuccess () {

+ 1 - 1
src/HManagement/siteManage/custom_option/index.vue

@@ -54,7 +54,7 @@ export default {
   },
   computed:{
     ...mapGetters({
-      acitveApp:'acitveApp',
+      activeApp:'activeApp',
     })
   },
   methods:{

+ 4 - 4
src/SManagement/archives_sc/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="normal-card">
-    <p v-if="acitveApp" style="font-size:26px;font-weight:300;padding-bottom:16px">{{acitveApp.meta.title}}&nbsp;<i @click="addToAsideBar" style="color:#999" :class="showAppCollection()?'el-icon-star-on collection':'el-icon-star-off'"></i></p>
+    <p v-if="activeApp" style="font-size:26px;font-weight:300;padding-bottom:16px">{{activeApp.meta.title}}&nbsp;<i @click="addToAsideBar" style="color:#999" :class="showAppCollection()?'el-icon-star-on collection':'el-icon-star-off'"></i></p>
     <div class="header-panl">
       <!-- 搜索及分类筛选 -->
       <filterList @changeTypeId="changeTypeId" @startSearch="startSearch">
@@ -96,7 +96,7 @@ export default {
   },
   computed:{
     ...mapGetters({
-    acitveApp:'acitveApp',
+    activeApp:'activeApp',
     menuApp:'menuApp'
     })
   },
@@ -107,7 +107,7 @@ export default {
   },
   methods: {
     showAppCollection () {
-			let _isSame = this.menuApp.some(m=>this.acitveApp.name === m.systemapp)
+			let _isSame = this.menuApp.some(m=>this.activeApp.name === m.systemapp)
 			return _isSame
     },
     // 创建快捷应用
@@ -116,7 +116,7 @@ export default {
         "classname": "sysmanage.develop.userauthforweb.userauth",
         "method": "create_usershortcuts",
         "content": {
-          "systemappid":this.acitveApp.systemappid
+          "systemappid":this.activeApp.systemappid
         }
       })
       console.log(res);

+ 2 - 2
src/components/newLayout/modules/aside.vue

@@ -154,8 +154,8 @@ export default {
   mounted () {
 
     let active_model = JSON.parse(sessionStorage.getItem('active_modules'))
-    if (sessionStorage.getItem('acitveApp')) {
-      let active_app = JSON.parse(sessionStorage.getItem('acitveApp'))
+    if (sessionStorage.getItem('activeApp')) {
+      let active_app = JSON.parse(sessionStorage.getItem('activeApp'))
       this.$store.dispatch('setActiveApp',{app:active_app,val:''})
     } else {
       this.$store.dispatch('setActiveApp',{app:active_model.apps[0],val:''})

+ 1 - 1
src/components/newLayout/modules/header.vue

@@ -65,7 +65,7 @@ export default {
   methods:{
     // 选择登录账号
     selectAccount (item) {
-      let arr = ['module_info','acitveApp','active_modules','folderid']
+      let arr = ['module_info','activeApp','active_modules','folderid']
       arr.forEach(key=>{
         sessionStorage.removeItem(key)
       })

+ 2 - 2
src/components/newLayout/modules/menu.vue

@@ -24,7 +24,7 @@ export default {
   },
   computed:{
     ...mapGetters({
-      acitveApp:'acitveApp',
+      activeApp:'activeApp',
       sys_modules:'sys_modules'
     })
   },
@@ -59,7 +59,7 @@ export default {
     this.setDefaultData()
   },
   watch:{
-    acitveApp (val) {
+    activeApp (val) {
       console.log(val,'-------')
       this.show = false
       setTimeout(() => {

+ 6 - 5
src/components/normal-basic-layout/details/index.vue

@@ -4,7 +4,7 @@
       <div class="flex-align-center flex-between normal-margin">
         <div class="flex-align-center" style="flex:1 0 auto">
           <p style="font-size:30px;font-weight:300;margin-right:16px">{{titleText?titleText:'##'}}</p>
-          <tagTemp v-if="acitveApp.isdatatag" style="flex:1" ref="tag" :ownertable="ownertable?ownertable:idname.slice(0, this.idname.length - 2)" @onSuccess="onSuccess"></tagTemp>
+          <tagTemp v-if="activeApp.isdatatag" style="flex:1" ref="tag" :ownertable="ownertable?ownertable:idname.slice(0, this.idname.length - 2)" @onSuccess="onSuccess"></tagTemp>
         </div>
         <div class="flex-align-center">
           <cpEdit v-if="tool.checkAuth($route.name,'update')" :formPath="formPath" :oldFormPath="oldFormPath" :data="editData" btnType="default" @onAddSuccess="onSuccess"></cpEdit>
@@ -26,7 +26,8 @@
     </div>
     <div style="box-sizing: border-box;padding:10px">
       <el-row class="flex-align-stretch" :gutter="10">
-        <el-col style="flex:1;width:calc(100% - 400px)" :span="acitveApp.isdatateam?18:acitveApp.isdatafollowup?18:24">
+        <el-col style="flex:1;width:calc(100% - 400px)" :span="activeApp.isdatateam?18:activeApp.isdatafollowup?18:24">
+          <slot name="customBefore"></slot>
           <tabTemp :tabs="tabs" :editData="editData" :idname="idname" :ownertable="ownertable?ownertable:idname.slice(0, this.idname.length - 2)" @onTabClick="onTabClick">
             <div :slot="'slot' + index" v-for="(tab,index) in tabs" :key="tab.index">
               <slot :name="'slot' + index"></slot>
@@ -35,8 +36,8 @@
           <slot name="custom"></slot>
         </el-col>
         <el-col style="width:400px;" :span="6">
-          <group v-if="acitveApp.isdatateam" ref="group" style="margin-bottom:10px" :ownertable="ownertable?ownertable:idname.slice(0, this.idname.length - 2)" @onSuccess="onSuccess"></group>
-          <follow-up v-if="acitveApp.isdatafollowup" ref="follow" :ownertable="ownertable?ownertable:idname.slice(0, this.idname.length - 2)"></follow-up>
+          <group v-if="activeApp.isdatateam" ref="group" style="margin-bottom:10px" :ownertable="ownertable?ownertable:idname.slice(0, this.idname.length - 2)" @onSuccess="onSuccess"></group>
+          <follow-up v-if="activeApp.isdatafollowup" ref="follow" :ownertable="ownertable?ownertable:idname.slice(0, this.idname.length - 2)"></follow-up>
         </el-col>
         
       </el-row>
@@ -75,7 +76,7 @@ export default {
   },
   computed:{
     ...mapGetters({
-      acitveApp:"acitveApp"
+      activeApp:"activeApp"
     })
   },
   components:{

+ 5 - 5
src/components/normal-basic-layout/index.vue

@@ -4,7 +4,7 @@
       <div class="layout-header-panel container normal-panel">
         <div class="flex-align-center flex-between">
           <div class="normal-margin flex-align-center">
-            <div v-if="acitveApp" style="font-size:26px;font-weight:300">{{customTitle ? customTitle : acitveApp.meta.title}}&nbsp;
+            <div v-if="activeApp" style="font-size:26px;font-weight:300">{{customTitle ? customTitle : activeApp.meta.title}}&nbsp;
               <!-- <i v-if="!customTitle" @click="addToAsideBar" style="color:#999" :class="showAppCollection()?'el-icon-star-on collection':'el-icon-star-off'"></i> -->
               <div v-if="!customTitle" style="display:inline">
                 <img width="20" v-if="showAppCollection()" src="@/assets/icons/incoll.svg" alt="">
@@ -90,7 +90,7 @@ export default {
   },
   computed:{
     ...mapGetters({
-      acitveApp:'acitveApp',
+      activeApp:'activeApp',
       searchValue:'searchValue',
       menuApp:'menuApp',
     })
@@ -129,7 +129,7 @@ export default {
       val == '' && this.listData()
     },
     async listData () {
-      // console.log(this.acitveApp)
+      // console.log(this.activeApp)
       this.param.id = this.apiId.query
       const res = await this.$api.requested(this.param)
       this.list = res.data
@@ -215,13 +215,13 @@ export default {
         "classname": "sysmanage.develop.userauthforweb.userauth",
         "method": "create_usershortcuts",
         "content": {
-          "systemappid":this.acitveApp.systemappid
+          "systemappid":this.activeApp.systemappid
         }
       })
       this.$store.dispatch('setAppMenu')
     },
     showAppCollection () {
-			let _isSame = this.menuApp.some(m=>this.acitveApp.name === m.systemapp)
+			let _isSame = this.menuApp.some(m=>this.activeApp.name === m.systemapp)
 			return _isSame
 		},
     onHeaderSearch (key,val) {

+ 4 - 4
src/components/normal-basic-layout/normal.vue

@@ -2,7 +2,7 @@
   <div class="basic__layout__panel">
     <div style="padding:16px 16px 0 16px;" class="flex-align-center flex-between" >
       <div class="flex-align-center ">
-        <div class="inline-16" v-if="acitveApp" style="font-size:26px;font-weight:300">{{customTitle ? customTitle : acitveApp.meta.title}}&nbsp;
+        <div class="inline-16" v-if="activeApp" style="font-size:26px;font-weight:300">{{customTitle ? customTitle : activeApp.meta.title}}&nbsp;
           <div v-if="!customTitle" style="display:inline">
             <img width="20" v-if="showAppCollection()" src="@/assets/icons/incoll.svg" alt="">
             <img width="20" v-else src="@/assets/icons/uncoll.svg" @click="addToAsideBar" alt="">
@@ -30,7 +30,7 @@ export default {
   },
   computed:{
     ...mapGetters({
-      acitveApp:'acitveApp',
+      activeApp:'activeApp',
       searchValue:'searchValue',
       menuApp:'menuApp',
     })
@@ -47,13 +47,13 @@ export default {
         "classname": "sysmanage.develop.userauthforweb.userauth",
         "method": "create_usershortcuts",
         "content": {
-          "systemappid":this.acitveApp.systemappid
+          "systemappid":this.activeApp.systemappid
         }
       })
       this.$store.dispatch('setAppMenu')
     },
     showAppCollection () {
-			let _isSame = this.menuApp.some(m=>this.acitveApp.name === m.systemapp)
+			let _isSame = this.menuApp.some(m=>this.activeApp.name === m.systemapp)
 			return _isSame
 		},
     refresh () {

+ 85 - 0
src/components/print/index.vue

@@ -0,0 +1,85 @@
+<template>
+  <div>
+    <el-button type="text" size="small" @click="queryModelList">打 印</el-button>
+    <el-dialog append-to-body title="选择模板" :visible.sync="dialogTableVisible" width="400px">
+      <el-table size="mini" :data="gridData">
+        <el-table-column prop="modelname" label="模板名称"></el-table-column>
+        <el-table-column width="100" label="操作">
+          <template slot-scope="scope">
+            <el-button size="small" type="text" @click="selectMode(scope.row)">选择</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+// import {defaultElementTypeProvider, hiprint} from '@/index'
+import {mapGetters} from 'vuex'
+export default {
+  props:['dataid'],
+  data () {
+    return {
+      gridData:[],
+      panel:{},
+      printData:{},
+      sys_printmodelid:null,
+      dialogTableVisible:false
+    }
+  },
+  computed:{
+    ...mapGetters({
+      activeApp:'activeApp'
+    })
+  },
+  methods:{
+    async queryModelList () {
+      this.dialogTableVisible = true
+      const res = await this.$api.requested({
+        "id": 20221121174201,
+        "content": { 
+          "systemappid":this.activeApp.systemappid
+        }
+      })
+      this.gridData = res.data
+    },
+    async queryPrintData() {
+      const res = await this.$api.requested({
+        "id": 20221121174301,
+        "content": { 
+          "sys_printmodelid": this.sys_printmodelid,
+          "dataid":this.dataid
+        }
+      })
+      this.panel = JSON.parse(res.data.modeljson)
+      let obj = this.panel.panels[0].printElements
+      obj.forEach(element => {
+        if (element.printElementType.type === 'text') {
+          this.printData[element.options.field] = res.data.data['dataset'+ element.options.sys_printdatasetid][0][element.options.field]
+        } else {
+          this.printData[element.options.field] = res.data.data['dataset'+ element.options.sys_printdatasetid]
+        }
+      })
+      this.onlyPrint()
+    },
+    selectMode (row) {
+      this.sys_printmodelid = row.sys_printmodelid
+      this.dialogTableVisible = false
+      this.queryPrintData()
+    },
+    onlyPrint() {
+      let hiprintTemplate = this.$print(undefined, this.panel, this.printData, {}, {
+        styleHandler: () => {
+          let css = '<link href="http://hiprint.io/Content/hiprint/css/print-lock.css" media="print" rel="stylesheet">';
+          return css
+        }
+      })
+      console.log(hiprintTemplate);
+    },
+  }
+}
+
+</script>
+<style>
+</style>

+ 1 - 1
src/components/uploadBindMediaStock/modules/list.vue

@@ -140,11 +140,11 @@ export default {
         if (index === undefined) {
           let _isSame = this.fileRouter.some(m=>folder.attachmentid === m.attachmentid)
           _isSame?'':this.fileRouter.push(folder)
+          this.$emit('toFolderDetail',folder.attachmentid)
         } else {
           this.fileRouter = this.fileRouter.slice(0,index + 1)
         }
       }
-      this.$emit('toFolderDetail',folder.attachmentid)
     },
     restChecked () {
       this.list.forEach((e,index)=>{

+ 0 - 1
src/main.js

@@ -28,7 +28,6 @@ import sort from './components/sort'
 import '@/style/theme/font-icon/iconfont.css'
 import {hiPrintPlugin} from './index'
 Vue.use(hiPrintPlugin)
-
 Vue.prototype.$api = api
 
 Vue.prototype.$upload = upload

+ 8 - 0
src/router/index.js

@@ -68,6 +68,14 @@ let routes = [
           ast_nav:true
         },
         component: () => import(/* webpackChunkName: "about" */ '@/views/printmodel/index.vue')
+      },{
+        path: '/printmodelDesign',
+        name: 'printmodelDesign',
+        meta: {
+          title: '打印模板设计',
+          ast_nav:true
+        },
+        component: () => import(/* webpackChunkName: "about" */ '@/views/printmodel/design/index.vue')
       }]
   }
 ];

+ 4 - 4
src/store/index.js

@@ -19,7 +19,7 @@ export default new Vuex.Store({
     active_modules:{},
     checks:[],
     dataToForm:{},
-    acitveApp:null,
+    activeApp:null,
     appname:'',
     menuApp:[],
     sys_modules:[],
@@ -37,7 +37,7 @@ export default new Vuex.Store({
     active_modules:state => state.active_modules,
     checks:state => state.checks,
     dataToForm:state => state.dataToForm,
-    acitveApp:state => state.acitveApp,
+    activeApp:state => state.activeApp,
     appname:state => state.appname,
     menuApp:state => state.menuApp,
     searchValue:state => state.searchValue,
@@ -76,9 +76,9 @@ export default new Vuex.Store({
     },
     
     setActiveApp (state,data) {
-      data.app?sessionStorage.setItem('acitveApp',JSON.stringify(data.app)):''
+      data.app?sessionStorage.setItem('activeApp',JSON.stringify(data.app)):''
       state.appname = data.name
-      state.acitveApp = JSON.parse(sessionStorage.getItem('acitveApp'))
+      state.activeApp = JSON.parse(sessionStorage.getItem('activeApp'))
         //头部区域搜索所传入的数值
       state.searchValue = data.val
     },

+ 206 - 0
src/views/printmodel/design/components/bindData.vue

@@ -0,0 +1,206 @@
+<template>
+  <div class="binddata__panel">
+    <el-tabs v-model="activeName">
+      <el-tab-pane label="绑定数据字段" name="first"></el-tab-pane>
+      <el-tab-pane label="数据集" name="second"></el-tab-pane>
+    </el-tabs>
+    <div v-if="activeName === 'first'">
+      <div v-for="(item,idx) in panels" :key="idx" class="mt-10">
+        <div v-if="item.printElementType.type === 'text'">
+          <p class="preview__item">{{item.options.title}}</p>
+          <el-select size="mini" v-model="item.options.sys_printdatasetid" placeholder="请选择" @click.native="act_DataBaseID = idx">
+            <el-option
+              v-for="i in databastlist"
+              :key="i.sys_printdatasetid"
+              :label="i.datasetname"
+              :value="i.sys_printdatasetid"
+              @click.native="queryDataBaseDetail(i.sys_printdatasetid)"
+              @visible-change="visibleChange">
+            </el-option>
+          </el-select>&nbsp;
+          <el-select size="mini" v-model="item.options.field" :disabled="idx !== act_DataBaseID" placeholder="请选择" @change="onChange">
+            <el-option
+              v-for="i in sys_printdataset"
+              :key="i.sys_printdataset_columnsid"
+              :label="i.column_name"
+              :value="i.column_name"
+              @visible-change="visibleChange">
+            </el-option>
+          </el-select>
+        </div>
+        <div v-if="item.printElementType.type === 'table'">
+          <p style="font-size:12px">表格数据</p>
+          <div>
+            <el-select size="mini" v-model="item.options.sys_printdatasetid" placeholder="请选择" @click.native="act_DataBaseID = idx" @change="queryDataBaseDetail">
+              <el-option
+                v-for="i in databastlist"
+                :key="i.sys_printdatasetid"
+                :label="i.datasetname"
+                :value="i.sys_printdatasetid"
+                @click.native="setTableField(item.options.field = `dataset${i.sys_printdatasetid}`)">
+              </el-option>
+            </el-select>&nbsp;
+            <div v-for="td in item.options.columns[0]" :key="td.index">
+              <p class="preview__item">{{td.title}}</p>
+              <el-select size="mini" v-model="td.field" :disabled="idx !== act_DataBaseID" placeholder="请选择" @change="onChange">
+                <el-option
+                  v-for="i in sys_printdataset"
+                  :key="i.sys_printdataset_columnsid"
+                  :label="i.column_name"
+                  :value="i.column_name"
+                  @visible-change="visibleChange">
+                </el-option>
+              </el-select>
+            </div>
+          </div>
+        </div>
+      </div>
+      <el-button type="primary" size="mini" @click="saveJson">保 存</el-button>
+    </div>
+    <div v-else>
+      <el-tag style="margin:0 10px 10px 0" type="danger" v-for="item in databastlist" :key="item.index" :disable-transitions="true" effect="dark" size="small" @close="deleteDatabase(item)" closable> {{item.datasetname}}</el-tag>
+      <div class="normal-margin">
+        <el-input style="margin-bottom:10px" size="small" v-model="database.datasetname" placeholder="请输入数据集名称"></el-input>
+        <el-input size="small" type="textarea" v-model="database.sqlstr" placeholder="请输入sql语句" :autosize="{ minRows: 3, maxRows: 6 }"></el-input>
+      </div>
+      <el-button type="primary" size="small" @click="saveDatabase">保存</el-button>
+    </div>
+  </div>
+</template>
+
+<script>
+
+export default {
+  props:['temp','modeData'],
+  computed:{
+    formComponent(){
+      if (this.dialogFormVisible) {
+        return ()=>import(`@/style/sv-print.css`)
+      } else {
+        return
+      }
+    }
+  },
+  data () {
+    return {
+      activeName:'first',
+      template:{},
+      panels:{},
+      databastlist:[],
+      sys_printdataset:[],
+      act_DataBaseID:null,
+      modeData:{},
+      database:{}
+    }
+  },
+  methods:{
+    onDesigned () {},
+    async saveJson () {
+      console.log(this.modeData)
+      this.template.panels[0].printElements = this.panels
+      const res = await this.$api.requested({
+        "id": 20221121160001,
+        "content": { 
+          "sys_printmodelid": this.$route.query.id,
+          "systemappid":this.modeData.systemappid,
+          "modelname":this.modeData.modelname,
+          "modeljson":this.template,
+          "isused":this.modeData.isused
+        }
+      })
+    },
+    async saveDatabase () {
+      this.database.sys_printmodelid = this.$route.query.id
+      const res = await this.$api.requested({
+        "id": 20221121160301,
+        "content": this.database,
+      })
+      this.querDataBase()
+    },
+    async querDataBase () {
+      const res = await this.$api.requested({
+        "id": 20221121160201,
+        "content": { 
+          "sys_printmodelid": this.$route.query.id
+        }
+      })
+      this.databastlist = res.data
+    },
+    async deleteDatabase (item) {
+       const res = await this.$api.requested({
+        "id": 20221121160401,
+        "content": { 
+          "sys_printdatasetid":item.sys_printdatasetid
+        }
+      })
+      this.querDataBase()
+    },
+    async queryDataBaseDetail (item) {
+      const res = await this.$api.requested({
+        "id": 20221121160501,
+        "content": { 
+          "sys_printdatasetid":item
+        }
+      })
+      this.sys_printdataset = res.data
+    },
+    visibleChange (val) {
+      // val?this.queryDataBaseDetail():''
+      val?'':this.sys_printdataset = []
+    },
+    onChange () {},
+    onClose () {
+      this.$emit('onClose')
+    },
+    setTableField (item,id) {
+      console.log(item,id)
+    }
+  },
+  watch:{
+    temp (val) {
+       this.template = JSON.parse(val)
+       this.panels = this.template.panels[0].printElements
+    }
+  },
+  mounted () {
+    this.querDataBase()
+  }
+}
+
+</script>
+<style scoped>
+.preview{
+  position: fixed;
+  min-height: 600px;
+  width: 550px;
+  top:10px;
+  right:30px;
+  z-index: 99;
+  background: #fff;
+  box-shadow: 0 2px 4px #0000004d;
+  padding: 10px;
+}
+.preview__item{
+  position: relative;
+  font-size: 12px;
+  line-height: 30px;
+}
+.preview__item__table{
+  display: flex;
+  align-items: center;
+  margin-bottom: 10px;
+}
+.preview__item__table p{
+  flex: 1;
+  width:80px ;
+  border: 1px solid #f1f2f3;
+  font-size: 12px;
+  text-align: center;
+  line-height: 30px;
+  margin-left: -1px;
+}
+.binddata__panel{
+  height: 600px;
+  overflow-y:scroll ;
+}
+</style>

File diff suppressed because it is too large
+ 849 - 140
src/views/printmodel/design/index.vue


+ 36 - 0
src/views/printmodel/design/panel.js

@@ -0,0 +1,36 @@
+export default {
+  "panels": [
+    {
+      "index": 0,
+      "paperType": "A4",
+      "height": 297,
+      "width": 210,
+      "paperHeader": 0,
+      "paperFooter": 841.8897637795277,
+      "printElements": [
+        {
+          "options": {
+            "left": 231,
+            "top": 21,
+            "height": 9.75,
+            "width": 120,
+            "title": "经销项目协议",
+            "coordinateSync": false,
+            "widthHeightSync": false,
+            "fontSize": 18,
+            "qrCodeLevel": 0,
+            "right": 350.25,
+            "bottom": 30,
+            "vCenter": 290.25,
+            "hCenter": 25.125
+          },
+          "printElementType": {
+            "title": "文本",
+            "type": "text"
+          }
+        }
+      ],
+      "topOffset": 30
+    }
+  ]
+}

+ 85 - 0
src/views/printmodel/design/preview.vue

@@ -0,0 +1,85 @@
+<template>
+  <a-modal :visible="visible" :maskClosable="false"
+           @cancel="hideModal" :width="width+'mm'">
+    <a-spin :spinning="spinning" style="min-height: 100px">
+      <div id="preview_content_design"></div>
+    </a-spin>
+    <template slot="title">
+      <a-space>
+        <div style="margin-right: 20px">打印预览</div>
+        <a-button :loading="waitShowPrinter" type="primary" icon="printer" @click.stop="print">打印</a-button>
+        <a-button type="primary" icon="printer" @click.stop="toPdf">pdf</a-button>
+      </a-space>
+    </template>
+    <template slot="footer">
+      <a-button key="close" type="info" @click="hideModal">
+        关闭
+      </a-button>
+    </template>
+  </a-modal>
+</template>
+
+<script>
+export default {
+  name: "printPreview",
+  props: {},
+  data() {
+    return {
+      visible: false,
+      spinning: true,
+      waitShowPrinter: false,
+      // 纸张宽 mm
+      width: 0,
+      // 模板
+      hiprintTemplate: {},
+      // 数据
+      printData: data.table
+    }
+  },
+  computed: {},
+  watch: {},
+  created() {
+  },
+  mounted() {
+  },
+  methods: {
+    hideModal() {
+      this.visible = false
+    },
+    show(hiprintTemplate, printData, width = '210') {
+      this.visible = true
+      this.spinning = true
+      this.width = width
+      this.hiprintTemplate = hiprintTemplate
+      this.printData = printData
+      setTimeout(() => {
+        // eslint-disable-next-line no-undef
+        $('#preview_content_design').html(hiprintTemplate.getHtml(printData))
+        this.spinning = false
+      }, 500)
+    },
+    print() {
+      this.waitShowPrinter = true
+      this.hiprintTemplate.print(this.printData, {}, {
+        callback: () => {
+          console.log('callback')
+          this.waitShowPrinter = false
+        }
+      })
+    },
+    toPdf() {
+      this.hiprintTemplate.toPdf({}, '打印预览');
+    },
+  }
+}
+
+</script>
+<style lang="less" scoped>
+/deep/ .ant-modal-body {
+  padding: 0px;
+}
+
+/deep/ .ant-modal-content {
+  margin-bottom: 24px;
+}
+</style>

File diff suppressed because it is too large
+ 0 - 0
src/views/printmodel/design/sv-print.css


+ 25 - 12
src/views/printmodel/index.vue

@@ -17,10 +17,20 @@
         </div>
       </template>
        <template v-slot:tbOpreation="scope">
-        <el-button type="text" size="small" @click="showTemp(scope.data.data)">模板设计</el-button>
+        <el-button class="inline-16" type="text" size="small" @click="showTemp(scope.data.data)">模板设计</el-button>
+        <el-popconfirm
+          confirm-button-text='确定'
+          cancel-button-text='取消'
+          icon="el-icon-info"
+          icon-color="red"
+          title="删除当前模板?"
+          @confirm="deleteTemp(scope.data.data)"
+        >
+        <el-button slot="reference" type="text" size="small">删 除</el-button>
+        </el-popconfirm>
+        
       </template>
     </basicLayout>
-    <designTemp ref="temp" @onClose="onClose"></designTemp>
   </div>
 </template>
 
@@ -33,7 +43,6 @@
  * @param {object} apiId:{query:查询的接口id,del:删除的接口id} 
  * @param {Array} options:{label:描述,value:值} 
  */
-import designTemp from './design/index.vue'
 export default {
   data () {
     return {
@@ -42,19 +51,23 @@ export default {
     }
   },
   components:{
-    designTemp
   },
   methods:{
     showTemp (row) {
-      this.$refs['temp'].dialogFormVisible = true
-      this.$refs['temp'].queryMode(row.sys_printmodelid)
-      this.$refs['temp'].formComponent()
+      this.$router.push({path:'/printmodelDesign',query:{
+        id:row.sys_printmodelid
+      }})
     },
-    onClose () {
-      // this.show = false
-      // setTimeout(() => {
-      //   this.show = true
-      // }, 1000);
+    async deleteTemp (row) {
+      const res = await this.$api.requested({
+        "id": 20221121160101,
+        "content": { 
+          "sys_printmodelid": row.sys_printmodelid
+        }
+      })
+      this.tool.showMessage(res,()=>{
+        this.$refs['basicLayout'].listData()
+      })
     }
   }
 }

+ 24 - 3
src/views/printmodel/modules/add.vue

@@ -6,8 +6,16 @@
         <el-form-item label="模板名称">
           <el-input v-model="param.modelname" placeholder="输入模板名称"></el-input>
         </el-form-item>
-        <el-form-item label="应用ID">
-          <el-input v-model="param.systemappid" placeholder="应用ID"></el-input>
+        <el-form-item label="应用">
+          <!-- <el-input v-model="param.systemappid" placeholder="应用ID"></el-input> -->
+          <el-select style="width:100%" v-model="param.systemappid" placeholder="请选择">
+            <el-option
+              v-for="item in applist"
+              :key="item.systemappid"
+              :label="item.systemappname"
+              :value="item.systemappid">
+            </el-option>
+          </el-select>
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
@@ -31,7 +39,8 @@ export default {
         "modelname":"",
         "modeljson":"json",
         "isused":1
-      }
+      },
+      applist:[]
     }
   },
   methods:{
@@ -45,7 +54,19 @@ export default {
       this.tool.showMessage(res,()=>{
         this.$emit('onSuccess')
       })
+    },
+    async aueryApplist () {
+      const res = await this.$api.requested({
+       "id": 20221122171801,
+        "content": { 
+          
+        }
+      })
+      this.applist = res.data
     }
+  },
+  mounted () {
+    this.aueryApplist()
   }
 }
 

+ 32 - 32
src/views/printmodel/modules/mode.js

@@ -1,38 +1,38 @@
 const panel = {
-  "panels": [
-    {
-      "index": 0,
-      "paperType": "A4",
-      "height": 297,
-      "width": 210,
-      "paperHeader": 0,
-      "paperFooter": 841.8897637795277,
-      "printElements": [
+    "panels": [
         {
-          "options": {
-            "left": 231,
-            "top": 21,
-            "height": 9.75,
-            "width": 120,
-            "title": "经销项目协议",
-            "coordinateSync": false,
-            "widthHeightSync": false,
-            "fontSize": 18,
-            "qrCodeLevel": 0,
-            "right": 350.25,
-            "bottom": 30,
-            "vCenter": 290.25,
-            "hCenter": 25.125
-          },
-          "printElementType": {
-            "title": "文本",
-            "type": "text"
-          }
+          "index": 0,
+          "paperType": "A4",
+          "height": 297,
+          "width": 210,
+          "paperHeader": 0,
+          "paperFooter": 841.8897637795277,
+          "printElements": [
+            {
+              "options": {
+                "left": 231,
+                "top": 21,
+                "height": 9.75,
+                "width": 120,
+                "title": "经销项目协议",
+                "coordinateSync": false,
+                "widthHeightSync": false,
+                "fontSize": 18,
+                "qrCodeLevel": 0,
+                "right": 350.25,
+                "bottom": 30,
+                "vCenter": 290.25,
+                "hCenter": 25.125
+              },
+              "printElementType": {
+                "title": "文本",
+                "type": "text"
+              }
+            }
+          ],
+          "topOffset": 30
         }
-      ],
-      "topOffset": 30
-    }
-  ]
+      ]
 }
 export default panel
 

Some files were not shown because too many files changed in this diff