浏览代码

Merge branch 'demo_' of http://123.60.19.203:8088/hitch/hitch-antd

guarantee-lsq 2 年之前
父节点
当前提交
4ca4ff7d41

+ 13 - 0
package-lock.json

@@ -16982,6 +16982,14 @@
       "resolved": "https://registry.npmjs.org/vue-cropper/-/vue-cropper-0.4.9.tgz",
       "integrity": "sha512-Uf1i/sCh+ZqSM9hb2YTGRENzJFH+mvDuv8N2brGLjK7UBuF7XDP7zbis8g/dcqZiMojAcBDtObFCn4ERFbRMxQ=="
     },
+    "vue-drag-resize": {
+      "version": "1.5.4",
+      "resolved": "https://registry.npmmirror.com/vue-drag-resize/-/vue-drag-resize-1.5.4.tgz",
+      "integrity": "sha512-SR3U7n6TAZEBgP7zw7bR9mjtAlYBjqIoaWTDPz5HXN/nYhOxKSA31aD7p71fmq1jtyt9reAnCx62valNL9ZAcg==",
+      "requires": {
+        "vue-drag-resize": "^1.5.0-rc3"
+      }
+    },
     "vue-eslint-parser": {
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz",
@@ -17192,6 +17200,11 @@
       "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==",
       "dev": true
     },
+    "vue-ueditor-wrap": {
+      "version": "2.5.6",
+      "resolved": "https://registry.npmmirror.com/vue-ueditor-wrap/-/vue-ueditor-wrap-2.5.6.tgz",
+      "integrity": "sha512-EJkYLyyzgOJTxGreiZ9wrmXthIMVVRSeFTzV6n0OR9w4aeqW79Prvog4jZ4G0kkmW3TTTBbZtHM9VNHEl6LJDA=="
+    },
     "vuex": {
       "version": "3.4.0",
       "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.4.0.tgz",

+ 1 - 0
package.json

@@ -36,6 +36,7 @@
     "vue-clipboard2": "^0.2.1",
     "vue-cookie": "^1.1.4",
     "vue-cropper": "0.4.9",
+    "vue-drag-resize": "^1.5.4",
     "vue-ls": "^3.2.1",
     "vue-print-nb": "^1.5.0",
     "vue-quill-editor": "^3.0.6",

+ 1 - 1
src/api/remote/opc.js

@@ -148,7 +148,7 @@ export function exportRemoteOpc (parameter) {
  */
 export function importRemoteOpc (parameter) {
   return axios({
-    url: '/remote/opcs/import',
+    url: '/remote/opcs/import/' + parameter.line,
     method: 'POST',
     headers: {
       'Accept': 'application/json',

二进制
src/assets/bgView/opcbg.png


+ 4 - 0
src/router/generator-platform-routers.js

@@ -443,6 +443,10 @@ export const constantRouterMap = [
     path: '/tree',
     component: () => import('@/views/sb/info/modules/SbTreeModal.vue')
   },
+  {
+    path: '/opc',
+    component: () => import('@/views/opc/Opc.vue')
+  },
   {
     path: '/toWorkplaceBacklog',
     component: () => import('@/views/statisticView/22')

+ 100 - 0
src/views/opc/Opc.vue

@@ -0,0 +1,100 @@
+<template>
+  <div class="main">
+    <img src="@/assets/bgView/opcbg.png" width="1920px" alt="">
+    <div class="icon" style="left:20px">
+      <a-button type="primary" icon="appstore" size="large" @click="visibleLeft=true"/>
+    </div>
+    <div class="icon" style="right:20px">
+      <a-button type="primary" icon="setting" size="large" @click="visibleRight=true" />
+    </div>
+    <VueDragResize
+      :isActive="isActive"
+      :w="60"
+      :h="20"
+      :minh="20"
+      :x="50"
+      :y="100"
+      :isDraggable="true"
+      :isResizable="true"
+      :stickSize="5"
+      @dragstop="resize">
+      <a-tooltip>
+        <template slot="title">
+          BJ202207151
+        </template>
+        <div class="info">BJ202207151</div>
+      </a-tooltip>
+    </VueDragResize>
+    <a-drawer
+      title="选择车间"
+      placement="left"
+      :closable="false"
+      :visible="visibleLeft"
+      @close="onCloseLeft"
+    >
+      <p>Some contents...</p>
+      <p>Some contents...</p>
+      <p>Some contents...</p>
+    </a-drawer>
+    <a-drawer
+      title="点位配置"
+      placement="right"
+      :closable="false"
+      :visible="visibleRight"
+      @close="onCloseRight"
+    >
+      <p>Some contents...</p>
+      <p>Some contents...</p>
+      <p>Some contents...</p>
+    </a-drawer>
+  </div>
+</template>
+
+<script>
+import VueDragResize from 'vue-drag-resize'
+
+export default {
+  name: 'Opc',
+  components: {
+    VueDragResize
+  },
+  data () {
+    return {
+      visibleLeft: false,
+      visibleRight: false,
+      isActive: true
+    }
+  },
+
+  methods: {
+    resize (newRect) {
+      this.isActive = false
+      console.log(newRect)
+    },
+    onCloseLeft () {
+      this.visibleLeft = false
+    },
+    onCloseRight () {
+      this.visibleRight = false
+    }
+
+  }
+}
+</script>
+
+<style lang="less" scoped>
+.main{
+  position: relative;
+}
+.info{
+  font-size: 12px;
+  transform: scale(0.5);
+}
+.icon{
+  font-size: 30px;
+  color: #fff;
+  position: absolute;
+  top:20px;
+
+}
+</style>

+ 48 - 11
src/views/remote/opc/modules/BaseForm.vue

@@ -18,15 +18,30 @@
       <row-list :col="2">
         <row-item>
           <a-form-item
-            label="设备名称"
+            label="车间位置"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-tree-select
+              style="width: 100%"
+              :dropdownStyle="{ maxHeight: '400px', overflow: 'auto' }"
+              :treeData="treeData"
+              :treeNodeFilterProp="'title'"
+              :showSearch="true"
+              v-decorator="['line', {rules: [{required: false, message: '车间位置不能为空'}]}]"
+              placeholder="请选择"
+            >
+            </a-tree-select>
+          </a-form-item>
+        </row-item>
+        <row-item>
+          <a-form-item
+            label="点位名称"
             :labelCol="BaseTool.Constant.labelCol"
             :wrapperCol="BaseTool.Constant.wrapperCol"
           >
             <a-input
-              style="width: 70%"
-              disabled
-              v-decorator="['sbName', {rules: [{required: true, message: '设备名称不能为空'}]}]" />
-            <a-button style="width: 30%" type="primary" @click="handleSbSelect">选择</a-button>
+              v-decorator="['sbName', {rules: [{required: true, message: '点位名称不能为空'}]}]" />
           </a-form-item>
         </row-item>
         <row-item>
@@ -95,6 +110,22 @@
             </a-select>
           </a-form-item>
         </row-item>
+        <row-item>
+          <a-form-item
+            label="opc页面是否已经配置位置"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-select v-decorator="['positionFlag', {initialValue:1, rules: [{required: true, message: 'opc页面是否已经配置位置不能为空'}]}]" placeholder="请选择">
+              <a-select-option
+                v-for="(label,value) in yesNoMap"
+                :key="value"
+                :label="label"
+                :value="parseInt(value)">{{ label }}
+              </a-select-option>
+            </a-select>
+          </a-form-item>
+        </row-item>
         <row-item>
 
           <a-form-item
@@ -103,7 +134,7 @@
             :wrapperCol="BaseTool.Constant.wrapperCol"
           >
             <a-input
-              v-decorator="['xPosition', {rules: [{required: true, message: 'x轴位置不能为空'}]}]"/>
+              v-decorator="['xPosition', {initialValue:50, rules: [{required: true, message: 'x轴位置不能为空'}]}]"/>
           </a-form-item>
         </row-item>
         <row-item>
@@ -114,7 +145,7 @@
             :wrapperCol="BaseTool.Constant.wrapperCol"
           >
             <a-input
-              v-decorator="['yPosition', {rules: [{required: true, message: 'y轴位置不能为空'}]}]"/>
+              v-decorator="['yPosition', {initialValue:50, rules: [{required: true, message: 'y轴位置不能为空'}]}]"/>
           </a-form-item>
         </row-item>
         <row-item>
@@ -125,7 +156,7 @@
             :wrapperCol="BaseTool.Constant.wrapperCol"
           >
             <a-input
-              v-decorator="['width', {rules: [{required: true, message: '位置宽度不能为空'}]}]"/>
+              v-decorator="['width', {initialValue:50, rules: [{required: true, message: '位置宽度不能为空'}]}]"/>
           </a-form-item>
         </row-item>
         <row-item>
@@ -136,7 +167,7 @@
             :wrapperCol="BaseTool.Constant.wrapperCol"
           >
             <a-input
-              v-decorator="['height', {rules: [{required: true, message: '位置高度不能为空'}]}]"/>
+              v-decorator="['height', {initialValue:50, rules: [{ required: true, message: '位置高度不能为空'}]}]"/>
           </a-form-item>
         </row-item>
         <row-item>
@@ -150,7 +181,7 @@
               v-decorator="['description', {rules: [{required: true, message: '描述不能为空'}]}]"/>
           </a-form-item>
         </row-item>
-        <row-item>
+<!--        <row-item>
 
           <a-form-item
             label="实时数值"
@@ -160,7 +191,7 @@
             <a-input
               v-decorator="['result', {rules: [{required: false, message: '实时数值不能为空'}]}]"/>
           </a-form-item>
-        </row-item>
+        </row-item>-->
         <row-item>
 
           <a-form-item
@@ -208,6 +239,7 @@
 import pick from 'lodash.pick'
 import { addRemoteOpc, updateRemoteOpc } from '@/api/remote/opc'
 import SbInfoSelectModal from '@/views/sb/info/modules/SbInfoSelectModal'
+import { getSbPositionTree } from '@/api/sb/position'
 export default {
   name: 'BaseRemoteOpc',
   components: {
@@ -218,6 +250,7 @@ export default {
       confirmLoading: false,
       modalTitle: null,
       map: {},
+      treeData: [],
       yesNoMap: {},
       form: this.$form.createForm(this),
       visible: false
@@ -229,6 +262,9 @@ export default {
     // 下拉框map
     this.map = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.REMOTE_OPC)
     this.yesNoMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.YES_NO)
+    getSbPositionTree({ opcFlag: 1 }).then(res => {
+      this.treeData = res.data
+    })
   },
   methods: {
     base (record) {
@@ -258,6 +294,7 @@ export default {
           'unit',
           'avFlag',
           'createdFlag',
+          'positionFlag',
           'remark'
         ])))
       })

+ 7 - 2
src/views/remote/opc/modules/Detail.vue

@@ -8,12 +8,14 @@
       </a-col>
     </a-row>
     <detail-list title="" :col="2">
-      <detail-list-item term="设备id">{{ model.sbId }}</detail-list-item>
-      <detail-list-item term="设备名称">{{ model.sbName }}</detail-list-item>
+      <detail-list-item term="opc点位id">{{ model.sbId }}</detail-list-item>
+      <detail-list-item term="opc点位名称">{{ model.sbName }}</detail-list-item>
+      <detail-list-item term="车间">{{ model.positionName }}</detail-list-item>
       <detail-list-item term="点位">{{ model.positionNum }}</detail-list-item>
       <detail-list-item term="类型">{{ BaseTool.Object.getField(map,model.type) }}</detail-list-item>
       <detail-list-item term="是否模拟量">{{ BaseTool.Object.getField(yesNoMap,model.avFlag) }}</detail-list-item>
       <detail-list-item term="opc服务器上是否已经创建">{{ BaseTool.Object.getField(yesNoMap,model.createdFlag) }}</detail-list-item>
+      <detail-list-item term="opc页面是否已经配置">{{ BaseTool.Object.getField(yesNoMap,model.positionFlag) }}</detail-list-item>
       <detail-list-item term="描述">{{ model.description }}</detail-list-item>
       <detail-list-item term="实时数值">{{ model.result }}</detail-list-item>
       <detail-list-item term="系数">{{ model.ratio }}</detail-list-item>
@@ -52,6 +54,8 @@ export default {
       model: {
         'sbId': null,
         'sbName': null,
+        'positionName': null,
+        'line': null,
         'positionNum': null,
         'type': null,
         'description': null,
@@ -63,6 +67,7 @@ export default {
         'height': null,
         'unit': null,
         'remark': null,
+        'positionFlag': null,
         'avFlag': null,
         'createdFlag': null,
         'createdUserId': null,

+ 23 - 0
src/views/remote/opc/modules/ImportFormAdd.vue

@@ -7,6 +7,22 @@
     @cancel="handleCancel"
   >
     <a-form :form="form">
+      <a-form-item
+        label="车间位置"
+        :labelCol="BaseTool.Constant.labelCol"
+        :wrapperCol="BaseTool.Constant.wrapperCol"
+      >
+        <a-tree-select
+          style="width: 100%"
+          :dropdownStyle="{ maxHeight: '400px', overflow: 'auto' }"
+          :treeData="treeData"
+          :treeNodeFilterProp="'title'"
+          :showSearch="true"
+          v-model="line"
+          placeholder="请选择"
+        >
+        </a-tree-select>
+      </a-form-item>
       <a-form-item
         label="上传文件"
         :labelCol="BaseTool.Constant.labelCol"
@@ -30,6 +46,7 @@
 
 <script>
 import { importRemoteOpc } from '@/api/remote/opc'
+import { getSbPositionTree } from '@/api/sb/position'
 
 export default {
   name: 'RemoteMeasureImportForm',
@@ -39,7 +56,9 @@ export default {
       modalTitle: null,
       form: this.$form.createForm(this),
       visible: false,
+      line: null,
       type: null,
+      treeData: [],
       fileList: []
     }
   },
@@ -48,6 +67,9 @@ export default {
       this.visible = true
       this.modalTitle = '新增导入'
       this.type = 1
+      getSbPositionTree({ opcFlag: 1 }).then(res => {
+        this.treeData = res.data
+      })
     },
     handleRemove (file) {
       const index = this.fileList.indexOf(file)
@@ -87,6 +109,7 @@ export default {
           return
         }
         const formData = new FormData()
+        formData.append('line', this.line)
         formData.append('file', this.fileList[0])
         importRemoteOpc(formData)
           .then((res) => {

+ 7 - 0
yarn.lock

@@ -12476,6 +12476,13 @@ vue-cropper@0.4.9:
   resolved "https://registry.yarnpkg.com/vue-cropper/-/vue-cropper-0.4.9.tgz#fe650f32516ecf29014bbd4a9079191c8dc5a5ae"
   integrity sha512-Uf1i/sCh+ZqSM9hb2YTGRENzJFH+mvDuv8N2brGLjK7UBuF7XDP7zbis8g/dcqZiMojAcBDtObFCn4ERFbRMxQ==
 
+vue-drag-resize@^1.5.0-rc3, vue-drag-resize@^1.5.4:
+  version "1.5.4"
+  resolved "https://registry.npmmirror.com/vue-drag-resize/-/vue-drag-resize-1.5.4.tgz#f583f40f356e5792aa89109b3d13ba4407c25198"
+  integrity sha512-SR3U7n6TAZEBgP7zw7bR9mjtAlYBjqIoaWTDPz5HXN/nYhOxKSA31aD7p71fmq1jtyt9reAnCx62valNL9ZAcg==
+  dependencies:
+    vue-drag-resize "^1.5.0-rc3"
+
 vue-eslint-parser@^2.0.3:
   version "2.0.3"
   resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz#c268c96c6d94cfe3d938a5f7593959b0ca3360d1"