step2.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408
  1. <template>
  2. <div style="display: flex; justify-content: center;">
  3. <div ref="stencilContainer" class="stencil" />
  4. <div ref="container" class="content" />
  5. <div style="z-index: 999; padding: 5px; width: 300px; background-color: #f5f5f5;">
  6. <a-form :model="formState">
  7. <a-form-item v-show="formState.height != null" label="高">
  8. <a-input v-model:value="formState.height" @change="heightChange" />
  9. </a-form-item>
  10. <a-form-item v-show="formState.width != null" label="宽">
  11. <a-input v-model:value="formState.width" @change="widthChange" />
  12. </a-form-item>
  13. <a-form-item v-show="formState.text != null" label="内容">
  14. <a-input v-model:value="formState.text" @change="textChange" />
  15. </a-form-item>
  16. <a-form-item v-show="formState.type != null" label="节点类型">
  17. <a-input v-model:value="formState.type" disabled @change="typeChange" />
  18. </a-form-item>
  19. <a-form-item v-show="formState.textColor != null" label="文字颜色">
  20. <a-input v-model:value="formState.textColor" type="color" @change="textColorChange" />
  21. </a-form-item>
  22. <a-form-item v-show="formState.border != null" label="边框颜色">
  23. <a-input v-model:value="formState.border" type="color" @change="borderChange" />
  24. </a-form-item>
  25. <a-form-item v-show="formState.imgUrl != null" label="图片地址">
  26. <a-input v-model:value="formState.imgUrl" @change="imgUrlChange" />
  27. </a-form-item>
  28. </a-form>
  29. </div>
  30. </div>
  31. <a-divider />
  32. <div style="display: flex; justify-content: space-between; width: 100%">
  33. <a-button @click="before">上一步</a-button>
  34. <div>
  35. <a-button @click="output">保存模版</a-button>
  36. <a-modal
  37. v-model:visible="visible" title="请填写模版名称" ok-text="确认"
  38. cancel-text="取消" @ok="handleOk"
  39. >
  40. <a-input v-model:value="TempName" placeholder="请输入模版名称" />
  41. </a-modal>
  42. <a-button @click="getPng">预览图片</a-button>
  43. <a-modal
  44. v-model:visible="imgVisible" title="预览图片" ok-text="确认"
  45. cancel-text="取消" @ok="imgHandleOk"
  46. >
  47. <div style=" display: flex; justify-content: center;"><img style="border: 1px solid #000;" :src="imgBase64" alt="" /></div>
  48. </a-modal>
  49. </div>
  50. </div>
  51. </template>
  52. <script setup>
  53. import { ref, h ,onMounted , computed } from 'vue';
  54. import { Graph, Shape, Addon, DataUri } from '@antv/x6';
  55. import { useRoute,useRouter} from 'vue-router';
  56. import { useStore } from 'vuex';
  57. import { Modal } from 'ant-design-vue';
  58. import Common from '../../common/Common.js';
  59. const route = useRoute();
  60. const router = useRouter();
  61. const store = useStore();
  62. const { Stencil ,Dnd} = Addon;
  63. let dnd = null;
  64. const CreateDnd = () =>{
  65. dnd = new Dnd({
  66. target:graph,
  67. });
  68. };
  69. const { Rect, Image } = Shape;
  70. let cellTem = null;
  71. const TemText = computed(()=> store.state.downloadStore.tempText );
  72. const TempId = computed(()=> store.state.downloadStore.templateId );
  73. const TempName = ref('');
  74. const imgBase64 = ref('');
  75. let graph = null;
  76. const formState = ref({
  77. text: null,
  78. textColor: null,
  79. border: null,
  80. imgUrl: null,
  81. height: null,
  82. width: null,
  83. type: null,
  84. });
  85. const container = ref(null);
  86. const stencilContainer = ref(null);
  87. const visible = ref(false);
  88. const handleOk = () => {
  89. if (TempName.value == '') {
  90. Modal.info({
  91. title: '提示',
  92. content: h('div', {}, [h('p', '模版名称不能为空')]),
  93. onOk() {
  94. console.log('ok');
  95. },
  96. });
  97. return;
  98. }
  99. visible.value = false;
  100. let json = graph.toJSON();
  101. console.log(json.cells);
  102. $.ajax({
  103. url:'/api/printPageResource/uploadCustomerPrintTemplateX6',
  104. type: 'post',
  105. // contentType: 'application/json',
  106. dataType:'json',
  107. data:{
  108. no:moment(new Date()).format('YYYY-MM-DD HH:mm'),
  109. name:TempName.value,
  110. contentX6:JSON.stringify(json),
  111. type:'X6',
  112. id:TempId.value,
  113. },
  114. beforeSend: function(request) {
  115. Common.addTokenToRequest(request);
  116. },
  117. success:res=>{
  118. // console.log(res);
  119. if (res) {
  120. Modal.info({
  121. title: '提示',
  122. content: h('div', {}, [h('p', '上传成功!')]),
  123. onOk() {
  124. },
  125. });
  126. }else{
  127. Modal.info({
  128. title: '提示',
  129. content: h('div', {}, [h('p', res)]),
  130. onOk() {
  131. },
  132. });
  133. }
  134. },
  135. error:e=>{
  136. Common.processException(e);
  137. },
  138. });
  139. console.log('发请求');
  140. };
  141. const imgVisible = ref(false);
  142. const imgHandleOk = () => {
  143. imgVisible.value = false;
  144. };
  145. const before = () =>{
  146. store.commit('changeStep',0);
  147. };
  148. const textChange = () => {
  149. cellTem.attr('label/text', formState.value.text);
  150. };
  151. const output = () => {
  152. visible.value = true;
  153. // console.log(graph.toJSON());
  154. // console.log(JSON.stringify(graph.toJSON()));
  155. };
  156. const getPng = () => {
  157. graph.toJPEG(dataUri => {
  158. // 下载
  159. imgVisible.value = true;
  160. imgBase64.value = dataUri;
  161. console.log(dataUri);
  162. // DataUri.downloadDataUri(dataUri, 'temp.jpeg');
  163. }, {
  164. serializeImages: true,
  165. quality: 1,
  166. });
  167. };
  168. const textColorChange = () => {
  169. cellTem.attr('text/fill', formState.value.textColor);
  170. };
  171. const borderChange = () => {
  172. cellTem.attr('rect/stroke', formState.value.border);
  173. };
  174. const imgUrlChange = () => {
  175. cellTem.attr('image/xlink:href', formState.value.imgUrl);
  176. };
  177. const typeChange = e =>{
  178. cellTem.data.type = e.target.value;
  179. };
  180. const widthChange = () => {
  181. cellTem.size(formState.value.width, formState.value.height);
  182. };
  183. const heightChange = () => {
  184. cellTem.size(formState.value.width, formState.value.height);
  185. };
  186. const setGraph = () => {
  187. graph = new Graph({
  188. container: container.value,
  189. width: 400,
  190. height: 400,
  191. background: {
  192. color: '#ddd',
  193. },
  194. grid: {
  195. size: 10,
  196. visible: true,
  197. },
  198. history: true,
  199. resizing: {
  200. enabled: true,
  201. restricted: true,
  202. // 让节点成为另一个节点的子节点
  203. // embedding: {
  204. // enabled: true,
  205. // findParent({ node }) {
  206. // const bbox = node.getBBox()
  207. // return this.getNodes().filter((node) => {
  208. // // 只有 data.parent 为 true 的节点才是父节点
  209. // const data = node.getData()
  210. // if (data && data.parent) {
  211. // const targetBBox = node.getBBox()
  212. // return bbox.isIntersectWithRect(targetBBox)
  213. // }
  214. // return false
  215. // })
  216. // }
  217. // }
  218. },
  219. });
  220. graph.on('cell:mouseenter', ({ cell }) => {
  221. if (cell.data.parent) {
  222. return;
  223. }
  224. if (cell.isNode()) {
  225. cell.addTools([
  226. {
  227. name: 'button-remove',
  228. args: {
  229. x: 0,
  230. y: 0,
  231. offset: { x: 10, y: 10 },
  232. },
  233. },
  234. ]);
  235. }
  236. });
  237. graph.on('cell:mouseleave', ({ cell }) => {
  238. cell.removeTools();
  239. });
  240. graph.on('cell:click', ({ cell }) => {
  241. console.log(cell);
  242. formState.value.text = null;
  243. formState.value.textColor = null;
  244. formState.value.border = null;
  245. formState.value.imgUrl = null;
  246. formState.value.type = null;
  247. cellTem = null;
  248. cellTem = cell;
  249. if (cell.attrs.label != undefined && cell.attrs.label.text != null) {
  250. formState.value.text = cell.attrs.label.text;
  251. }
  252. if (cell.attrs.text != undefined && cell.attrs.text.fill != null) {
  253. formState.value.textColor = cell.attrs.text.fill;
  254. }
  255. if (cell.attrs.rect != undefined && cell.attrs.rect.stroke != null) {
  256. formState.value.border = cell.attrs.rect.stroke;
  257. }
  258. if (cell.data.type) {
  259. formState.value.type = cell.data.type;
  260. }
  261. if (cell.attrs.image != undefined && cell.attrs.image['xlink:href'] != null) {
  262. formState.value.imgUrl = cellTem.attrs.image['xlink:href'];
  263. }
  264. formState.value.height = cellTem.size().height;
  265. formState.value.width = cellTem.size().width;
  266. });
  267. // 创建节点
  268. const Box = new Shape.Rect({
  269. x: 100,
  270. y: 200,
  271. width: 200,
  272. height: 100,
  273. // angle: 30,
  274. attrs: {
  275. rect: {
  276. stroke: '#FFFFFF',
  277. },
  278. },
  279. data: {
  280. parent: true,
  281. type:'根节点',
  282. },
  283. });
  284. // 添加到画布
  285. graph.addNode(Box);
  286. };
  287. const setStencil = () => {
  288. const stencil = new Stencil({
  289. // title: '节点',
  290. target: graph,
  291. stencilGraphWidth: 300,
  292. // collapsable: true,
  293. groups: [
  294. {
  295. name: 'group',
  296. title: TemText.value,
  297. graphWidth: 300,
  298. graphHeight: 200,
  299. },
  300. ],
  301. });
  302. const tem1 = new Rect({
  303. width: 100,
  304. height: 50,
  305. stroke:'#FFFFFF',
  306. attrs: {
  307. label: {
  308. fontSize: 12,
  309. text: '文本',
  310. refX: 0,
  311. // refY: 5,
  312. textAnchor: 'start',
  313. textVerticalAnchor: 'middle',
  314. },
  315. rect: {
  316. stroke: '#FFFFFF',
  317. },
  318. },
  319. data:{
  320. type:'静态文本',
  321. },
  322. });
  323. const tem2 = new Rect({
  324. width: 100,
  325. height: 50,
  326. attrs: {
  327. label: {
  328. fontSize: 12,
  329. text: '动态文本:',
  330. refX: 0,
  331. // refY: 5,
  332. textAnchor: 'start',
  333. textVerticalAnchor: 'middle',
  334. },
  335. rect: {
  336. stroke: '#FFFFFF',
  337. },
  338. },
  339. data:{
  340. type:'动态文本',
  341. },
  342. });
  343. const tem3 = new Image({
  344. width: 96,
  345. height: 30,
  346. data:{
  347. type:'图片',
  348. },
  349. imageUrl: 'data:image/png;base64,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',
  350. });
  351. const tem4 = new Image({
  352. width: 50,
  353. height: 50,
  354. data:{
  355. type:'二维码',
  356. },
  357. imageUrl: `data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZAAAAGQAQAAAACoxAthAAAABGdBTUEAALGPC/xhBQ
  358. AAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QAAd2KE6QAAAAJcEhZcwAAFxEAABcRA
  359. com8z8AAADvSURBVHja7dZBbgQhDARA/v/pRNHIQwOz2d2zyydsKG4tGD9f10AQBEGQj8hY6q+v2bmHIEgEaFufewiCZLyu2Xixh
  360. yDI+hwlRRDk/4hVhyDIE6lKklGLPQRpTrLWZ2nfQ5Du5KzxYo4gSB3aIzZpdgiCrN+1eWRegiDItczv2/1V2+J19wjSnOxxml0+V
  361. EvEEKQxSboG61ghSGuy1zx2zhCkOxlLPV2RFyBId7Ju731diyBIHbuGk9R0zrZfH4IgEbr5SGXwEAR5iliSD1OJIC1IVa5rcoG7
  362. R5DmJKvg/QQ9RwxBmpLvCkEQBEHe1i8/Fy+ejOFn3QAAAABJRU5ErkJggg==`,
  363. });
  364. stencil.load([tem1, tem2, tem3, tem4], 'group');
  365. stencilContainer.value.appendChild(stencil.container);
  366. };
  367. onMounted(() => {
  368. console.log('加载完毕');
  369. setGraph();
  370. setStencil();
  371. CreateDnd();
  372. dnd.start();
  373. let temp = store.state.downloadStore.templateVal;
  374. if (temp != '') {
  375. console.log(temp);
  376. console.log('非空');
  377. graph.fromJSON(JSON.parse(temp));
  378. }
  379. });
  380. </script>
  381. <style>
  382. .stencil {
  383. width: 300px;
  384. position: relative;
  385. }
  386. </style>