whj 1 年之前
父节点
当前提交
0024723a8d

+ 59 - 0
src/api/idle-assets/idle-assets.js

@@ -0,0 +1,59 @@
+import { axios } from '@/utils/request'
+import { stringify } from 'qs'
+
+/**
+ * page func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function getSbUnusedPage (parameter) {
+  return axios({
+    url: '/sbUnused/unused/page?' + stringify(parameter),
+    method: 'get',
+    headers: {
+      'Content-Type': 'application/json;charset=UTF-8'
+    }
+  })
+}
+/**
+ * page func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function addSbUnused (parameter) {
+  return axios({
+    url: '/sbUnused/unused',
+    method: 'post',
+    data: parameter
+  })
+}
+/**
+ * page func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function checkSbUnused (parameter) {
+  return axios({
+    url: '/sbUnused/unused/' + parameter.id,
+    method: 'post',
+    data: parameter
+  })
+}
+/**
+ * page func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function getUnusedUsers () {
+  return axios({
+    url: '/upms/users/getUnusedUsers',
+    method: 'get',
+    headers: {
+      'Content-Type': 'application/json;charset=UTF-8'
+    }
+  })
+}

+ 3 - 1
src/router/generator-platform-routers.js

@@ -428,7 +428,9 @@ const constantRouterComponents = {
   'PurchaseOrderReportByFifity': () => import('@/views/purchase/purchase-order-report/PurchaseOrderReportByFifity'),
   'Inventory': () => import('@/views/purchase/inventory/Inventory.vue'),
   'InventoryList': () => import('@/views/purchase/inventory-list/InventoryList.vue'),
-  'PurchaseOrderReportPie': () => import('@/views/purchase/purchase-order-report/PurchaseOrderReportPie.vue')
+  'PurchaseOrderReportPie': () => import('@/views/purchase/purchase-order-report/PurchaseOrderReportPie.vue'),
+  // 资产闲置
+  'IdleAssets': () => import('@/views/idle-assets/IdleAssets.vue')
 }
 
 // 前端未找到页面路由(固定不用改)

+ 3 - 1
src/utils/dict.js

@@ -347,7 +347,9 @@ DictCache.TYPE = {
   PLAN_METHOD: 'PLAN_METHOD', // 计划方法
   ADD_SPARE_STATUS: 'ADD_SPARE_STATUS', // 存货推送状态
   SO_TYPE: 'SO_TYPE', // 需求跟踪方式,
-  LONG_YAN_PURCHASE_DETAIL_STATUS: 'LONG_YAN_PURCHASE_DETAIL_STATUS'
+  LONG_YAN_PURCHASE_DETAIL_STATUS: 'LONG_YAN_PURCHASE_DETAIL_STATUS',
+  // 资产闲置
+  SB_UNUSED_STATUS: 'SB_UNUSED_STATUS'
 
 }
 DictCache.CODE = {

+ 202 - 0
src/views/idle-assets/IdleAssets.vue

@@ -0,0 +1,202 @@
+      nn m <template>
+  <a-card :bordered="false">
+    <div v-show="visible">
+      <div class="table-page-search-wrapper" @keyup.enter="handleEnter">
+        <a-form layout="inline">
+          <a-row :gutter="48">
+            <a-col :md="8" :sm="24">
+              <a-form-item label="申请人">
+                <a-input v-model.trim="queryParam.keyword" placeholder="请输入申请人"/>
+              </a-form-item>
+            </a-col>
+            <a-col :md="8 || 24" :sm="24">
+              <span class="table-page-search-submitButtons">
+                <a-button type="primary" @click="$refs.table.refresh(true)">查询</a-button>
+                <a-button style="margin-left: 8px" @click="resetSearchForm">重置</a-button>
+              </span>
+            </a-col>
+          </a-row>
+        </a-form>
+      </div>
+
+      <div class="table-operator" style="margin-bottom: 8px;">
+        <a-button v-if="$auth('purchase-purchase-orders-add')" type="primary" icon="plus" @click="$refs.baseForm.base()">新增</a-button>
+        <!--        <a-button v-if="$auth('purchase-purchase-orders-add')" style="margin-left: 8px" type="primary" icon="plus" @click="$refs.addSpareForm.base()">新增物料</a-button>-->
+        <!-- <a-dropdown v-action:edit v-if="selectedRowKeys.length > 0 && $auth('purchase-purchase-orders-del')">
+          <a-menu slot="overlay">
+            <a-popconfirm title="是否要删除所选数据?" @confirm="batchDelete()">
+              <a-menu-item key="1"><a-icon type="delete" /><a>删除</a></a-menu-item>
+            </a-popconfirm>
+          </a-menu>
+          <a-button style="margin-left: 8px">
+            批量操作 <a-icon type="down" />
+          </a-button>
+        </a-dropdown> -->
+      </div>
+
+      <s-table
+        ref="table"
+        size="default"
+        rowKey="id"
+        :columns="columns"
+        :scroll="{x: 1, y: BaseTool.Constant.scrollY }"
+        :data="loadData"
+        :alert="options.alert"
+        :rowSelection="options.rowSelection"
+        showPagination="auto"
+      >
+        <span slot="action" slot-scope="record">
+          <a @click="handleView(record)">查看</a>
+          <operation-button
+            v-if="record.status===1"
+            @click="handleEdit(record)"
+          >修改</operation-button>
+        </span>
+        <template #status="text">
+          <badge :text="BaseTool.Object.getField(statusMap,text)" :status="DictCache.COLOR.LONG_YAN_PURCHASE_ORDER_STATUS[text]"/>
+        </template>
+      </s-table>
+    </div>
+    <BaseForm ref="baseForm" @ok="handleOk"/>
+  </a-card>
+</template>
+
+<script>
+import { STable, Ellipsis } from '@/components'
+import { getSbUnusedPage } from '@/api/idle-assets/idle-assets'
+import BaseForm from './modules/BaseForm.vue'
+export default {
+  name: 'IdleAssets',
+  components: {
+    STable,
+    Ellipsis,
+    BaseForm
+  },
+  data () {
+    return {
+      // 查询参数
+      queryParam: {
+      },
+      visible: true,
+      // 表头
+      columns: [
+        {
+          title: '序号',
+          dataIndex: 'index',
+          checked: true,
+          width: 70,
+          customRender: (text, record, index) => {
+            return `${(this.$refs.table.localPagination.current - 1) * this.$refs.table.localPagination.pageSize + index + 1}`
+          }
+        },
+        {
+          title: '闲置名称',
+          dataIndex: 'name',
+          checked: true,
+          width: 100
+        },
+        {
+          title: '审核人',
+          dataIndex: 'verityUserId',
+          checked: true,
+          width: 130
+        },
+        {
+          title: '状态',
+          dataIndex: 'status',
+          width: '100px',
+          fixed: 'right',
+          checked: true,
+          align: 'center',
+          scopedSlots: { customRender: 'status' }
+        },
+        {
+          title: '操作',
+          key: 'action',
+          width: '200px',
+          fixed: 'right',
+          checked: true,
+          align: 'center',
+          scopedSlots: { customRender: 'action' }
+        }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        parameter = {
+          ...parameter,
+          ...this.queryParam,
+          dataScope: {
+            sortBy: 'desc',
+            sortName: 'update_time'
+          }
+        }
+        return getSbUnusedPage(Object.assign(parameter, this.queryParam))
+          .then(res => {
+            return res.data
+          })
+      },
+      selectedRowKeys: [],
+      selectedRows: [],
+      options: {
+        alert: { show: true, clear: () => { this.selectedRowKeys = [] } },
+        rowSelection: {
+          selectedRowKeys: this.selectedRowKeys
+        }
+      },
+      optionAlertShow: false,
+      // 下拉框map
+      statusMap: {}
+
+    }
+  },
+  created () {
+    // 下拉框map
+    this.statusMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.LONG_YAN_PURCHASE_ORDER_STATUS)
+    this.tableOption()
+  },
+  methods: {
+    tableOption () {
+      if (!this.optionAlertShow) {
+        this.options = {
+          alert: { show: true, clear: () => { this.selectedRowKeys = [] } },
+          rowSelection: {
+            selectedRowKeys: this.selectedRowKeys,
+            getCheckboxProps: record => ({
+              props: {
+                disabled: false,
+                name: record.id
+              }
+            })
+          }
+        }
+        this.optionAlertShow = true
+      } else {
+        this.options = {
+          alert: false,
+          rowSelection: null
+        }
+        this.optionAlertShow = false
+      }
+    },
+    handleOk () {
+      this.visible = true
+      this.$refs.table.refresh()
+    },
+    resetSearchForm () {
+      this.queryParam = {
+      }
+      this.$refs.table.refresh(true)
+    },
+
+    handleEnter () {
+      this.$refs.table.refresh(true)
+    },
+    handleEdit (record) {
+
+    },
+    handleView (record) {
+
+    }
+  }
+}
+</script>

+ 172 - 0
src/views/idle-assets/modules/BaseForm.vue

@@ -0,0 +1,172 @@
+<template>
+  <a-modal
+    :title="title"
+    :width="800"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    @cancel="handleCancel"
+  >
+    <a-card >
+      <a-form :form="form">
+        <row-list :col="1" v-show="false">
+          <row-item>
+            <a-form-item>
+              <a-input v-decorator="['id']" type="hidden"/>
+            </a-form-item>
+          </row-item>
+        </row-list>
+        <row-list :col="2">
+          <row-item>
+            <a-form-item
+              label="闲置名称"
+              :labelCol="BaseTool.Constant.labelCol"
+              :wrapperCol="BaseTool.Constant.wrapperCol"
+            >
+              <a-input v-decorator="['name', { rules: [{required: true, message: '闲置名称不能为空'}]}]" placeholder="请选择" />
+            </a-form-item>
+          </row-item>
+          <row-item >
+            <a-form-item
+              label="审核人"
+              :labelCol="BaseTool.Constant.labelCol"
+              :wrapperCol="BaseTool.Constant.wrapperCol"
+            >
+              <a-select v-decorator="['verityUserId', { rules: [{required: true, message: '审核人不能为空'}]}]" placeholder="请选择">
+                <a-select-option
+                  v-for="{userId,realName} in verityUserIdMap"
+                  :key="userId"
+                  :label="realName"
+                  :value="userId">{{ realName }}
+                </a-select-option>
+              </a-select>
+            </a-form-item>
+          </row-item>
+        </row-list>
+
+        <row-list :col="1">
+          <row-item >
+            <a-form-item
+              label="设备集合"
+              :labelCol="BaseTool.Constant.labelCol2"
+              :wrapperCol="BaseTool.Constant.wrapperCol2"
+            >
+              <a-input
+                style="width: 80%"
+                disabled
+                v-model="sbs" />
+              <a-button :disabled="title==='编辑'" style="width: 20%" type="primary" @click="handleSbSelect">选择</a-button>
+            </a-form-item>
+          </row-item>
+        </row-list>
+      </a-form>
+    </a-card>
+    <template slot="footer">
+      <a-button :loading="confirmLoading" type="primary" @click="save()">保存</a-button>
+    </template>
+    <sb-info-select-modal ref="sbInfoSelectModal" @selected="handleSbSelectd"/>
+  </a-modal>
+</template>
+
+<script>
+import pick from 'lodash.pick'
+import { addSbUnused, getUnusedUsers } from '@/api/idle-assets/idle-assets'
+import SbInfoSelectModal from './SbInfoSelectModal'
+
+export default {
+  name: 'BaseForm',
+  components: {
+    SbInfoSelectModal
+  },
+  data () {
+    return {
+      form: this.$form.createForm(this),
+      visible: false,
+      title: '新增',
+      modal: {},
+      verityUserIdMap: [],
+      sbs: '',
+      sbInfoDTOS: [],
+      confirmLoading: false
+    }
+  },
+
+  created () {
+    // this.flagMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.PROJECT_NEW_AND_OLD)
+    this.getUnusedUsers()
+  },
+  methods: {
+    base (record) {
+      this.visible = true
+      if (this.BaseTool.Object.isBlank(record)) {
+        this.title = '新增'
+        return
+      }
+      this.title = '编辑'
+      this.modal = record
+      const { form: { setFieldsValue } } = this
+      this.$nextTick(() => {
+        setFieldsValue(Object.assign(pick(record, [
+          'id'
+        ])))
+      })
+    },
+    getUnusedUsers () {
+      getUnusedUsers().then(res => {
+        this.verityUserIdMap = res.data
+      })
+    },
+
+    handleSbSelect () {
+      this.$refs.sbInfoSelectModal.base({})
+    },
+    handleSbSelectd (keys, rows) {
+      console.log(keys, rows)
+      const sbs = []
+      this.sbInfoDTOS = rows.map(item => {
+        sbs.push(item.name)
+        return {
+          id: item.id,
+          name: item.name,
+          no: item.no,
+          positionNo: item.positionNo
+        }
+      })
+      this.sbs = sbs.join(',')
+    },
+    save () {
+      const { form: { validateFieldsAndScroll } } = this
+      // this.confirmLoading = true
+      validateFieldsAndScroll((errors, values) => {
+        if (errors) {
+          Object.values(errors).map(item => {
+            this.$message.error(item.errors[0].message)
+          })
+          this.confirmLoading = false
+          return
+        }
+        values.sbInfoDTOS = this.sbInfoDTOS
+        addSbUnused(values).then(res => {
+          this.$message.success('修改成功!')
+          this.handleCancel()
+        })
+      })
+    },
+    handleCancel (values) {
+      this.visible = false
+      this.modal = {}
+      this.form.resetFields()
+      this.$emit('ok', values)
+    }
+
+  }
+}
+</script>
+<style lang="less" scoped>
+.tooltip{
+  font-size:20px;
+  color:#ccc;
+  &:hover {
+  color:#2f54eb;
+  }
+}
+</style>

+ 358 - 0
src/views/idle-assets/modules/SbInfoSelectModal.vue

@@ -0,0 +1,358 @@
+<template>
+  <a-modal
+    :title="modalTitle"
+    :width="1300"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    class="ant-modal2"
+    @cancel="handleCancel"
+  >
+    <a-card :bordered="false">
+      <div class="table-page-search-wrapper">
+        <a-form layout="inline">
+          <a-row :gutter="48">
+            <a-col :md="8" :sm="24">
+              <a-form-item label="关键字">
+                <a-input v-model.trim="queryParam.keyword" placeholder="请输入名称/编码"/>
+              </a-form-item>
+            </a-col>
+            <!--            <a-col :md="8" :sm="24">
+              <a-form-item label="上层设备类型">
+                <a-tree-select
+                  style="width: 100%"
+                  :dropdownStyle="{ maxHeight: '400px', overflow: 'auto' }"
+                  :treeData="treeData"
+                  :treeNodeFilterProp="'title'"
+                  :showSearch="true"
+                  v-model="queryParam.parentId"
+                  placeholder="请选择"
+                >
+                </a-tree-select>
+              </a-form-item>
+            </a-col>-->
+            <a-col :md="6" :sm="24">
+              <a-form-item label="车间位置">
+                <a-select v-model="queryParam.positionId" placeholder="请选择">
+                  <a-select-option
+                    v-for="({id,name}) in sbPositionData"
+                    :key="id"
+                    :label="name"
+                    :value="id">{{ name }}
+                  </a-select-option>
+                </a-select>
+              </a-form-item>
+            </a-col>
+            <a-col :md="6" :sm="24">
+              <a-form-item label="设备类型">
+                <a-tree-select
+                  style="width: 100%"
+                  :dropdownStyle="{ maxHeight: '400px', overflow: 'auto' }"
+                  :treeData="treeData"
+                  :treeNodeFilterProp="'title'"
+                  :showSearch="true"
+                  placeholder="请选择"
+                  @change="handleChange"
+                >
+                </a-tree-select>
+              </a-form-item>
+            </a-col>
+            <a-col :md="8 || 24" :sm="24">
+              <span class="table-page-search-submitButtons">
+                <a-button type="primary" @click="$refs.table.refresh(true)">查询</a-button>
+                <a-button style="margin-left: 8px" @click="resetSearchForm">重置</a-button>
+              </span>
+            </a-col>
+          </a-row>
+        </a-form>
+      </div>
+
+      <div class="table-operator" style="margin-bottom: 8px;">
+      </div>
+
+      <s-table
+        ref="table"
+        size="default"
+        rowKey="id"
+        :columns="columns"
+        :data="loadData"
+        :alert="options.alert"
+        :customRow="options.customRow"
+        :rowSelection="options.rowSelection"
+        :scroll="{ x: 1300, y: BaseTool.Constant.scrollY }"
+        showPagination="auto"
+      >
+        <span slot="action" slot-scope="record">
+          <template>
+
+          </template>
+        </span>
+        <span slot="status" slot-scope="text">
+          <badge :status="DictCache.COLOR.SB_INFO_STATUS[text]" :text="statusMap[text]" />
+        </span>
+      </s-table>
+    </a-card>
+    <template slot="footer">
+      <a-button :loading="confirmLoading" type="primary" @click="handleCancel()">取消</a-button>
+      <a-button :loading="confirmLoading" type="primary" @click="handleSelect()">选择</a-button>
+    </template>
+  </a-modal>
+</template>
+
+<script>
+import { STable, Ellipsis } from '@/components'
+import { getSbInfoPage, fetchSbInfo, getSbInfoTree } from '@/api/sb/info'
+import { querySbPosition } from '@/api/sb/position'
+import { fetchSbTypeTree } from '@/api/sb/type'
+
+export default {
+  name: 'SbInfoSelectModal',
+  components: {
+    STable,
+    Ellipsis
+  },
+  props: {
+    type: {
+      type: String,
+      default: 'checkbox'
+    },
+    selectedRowKey: {
+      type: Array,
+      default: () => {
+        return []
+      }
+    },
+    selectedRow: {
+      type: Array,
+      default: () => {
+        return []
+      }
+    }
+  },
+  data () {
+    return {
+      confirmLoading: false,
+      mdl: {},
+      modalTitle: null,
+      visible: false,
+      // 查询参数
+      queryParam: {
+      },
+      extraQueryParam: {
+      },
+      depreciationTypeMap: {},
+      levelMap: {},
+      statusMap: {},
+      unitMap: {},
+      useTypeMap: {},
+      sourceTypeMap: {},
+      treeData: [],
+      sbPositionData: [],
+      typeList: [],
+      // 表头
+      columns: [
+        {
+          title: '设备名称',
+          checked: true,
+          dataIndex: 'name'
+        },
+        {
+          title: '设备编号',
+          dataIndex: 'no',
+          checked: true
+        },
+        {
+          title: '设备位号',
+          checked: true,
+          dataIndex: 'positionNo'
+        },
+        {
+          title: '型号',
+          checked: true,
+          dataIndex: 'model'
+        },
+        {
+          title: '设备类型',
+          dataIndex: 'type',
+          checked: true,
+          width: 200,
+          customRender: (text, record, index) => {
+            return record.typeName
+          }
+        },
+        {
+          title: '设备等级',
+          dataIndex: 'level',
+          checked: true,
+          width: 200,
+          customRender: (text, record, index) => {
+            return this.BaseTool.Object.getField(this.levelMap, text)
+          }
+        },
+        {
+          title: '状态',
+          dataIndex: 'status',
+          checked: true,
+          width: 200,
+          scopedSlots: { customRender: 'status' }
+        },
+        {
+          title: '备注',
+          dataIndex: 'remark',
+          width: 200
+        },
+        {
+          title: '操作',
+          key: 'action',
+          width: '200px',
+          align: 'center',
+          fixed: 'right',
+          scopedSlots: { width: 200, customRender: 'action' }
+        }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        parameter = {
+          ...parameter,
+          ...this.queryParam,
+          ...this.extraQueryParam,
+          typeList: this.typeList,
+          dataScope: {
+            sortBy: 'asc',
+            sortName: 'no'
+          }
+        }
+        return getSbInfoPage(Object.assign(parameter, this.queryParam))
+          .then(res => {
+            return res.data
+          })
+      },
+      selectedRowKeys: [],
+      selectedRows: [],
+
+      options: {
+        alert: { show: true, clear: () => { this.selectedRowKeys = [] } },
+        rowSelection: {
+          selectedRowKeys: this.selectedRowKeys,
+          onChange: this.onSelectChange
+        }
+      },
+      optionAlertShow: true,
+      isCreated: false
+    }
+  },
+  created () {
+    this.tableOption()
+    this.depreciationTypeMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.SBINFO_DEPRECIATIONTYPE)
+    this.levelMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.SBINFO_LEVEL)
+    this.statusMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.SB_INFO_STATUS)
+    this.unitMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.SBINFO_UNIT)
+    this.sourceTypeMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.SBTYPE_SOURCETYPE)
+    this.useTypeMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.SB_UES_TYPE)
+    querySbPosition().then(res => {
+      this.sbPositionData = res.data
+    })
+    fetchSbTypeTree().then(res => {
+      this.treeData = res.data
+    })
+  },
+  methods: {
+    tableOption () {
+      // this.setTree()
+      if (!this.optionAlertShow) {
+        this.options = {
+          alert: { show: true, clear: () => { this.selectedRowKeys = [] } },
+          rowSelection: {
+            selectedRowKeys: this.selectedRowKeys,
+            onChange: this.onSelectChange,
+            type: this.type,
+            getCheckboxProps: record => ({
+              props: {
+                disabled: false,
+                name: record.id
+              }
+            })
+          },
+          customRow: (record) => {
+            return {
+              on: { // 事件
+                click: (event) => { // 点击行
+                  // 选择对象
+                  this.mySelect([record.id], [record])
+                },
+                dblclick: (event) => {
+                  this.mySelect([record.id], [record])
+                  this.handleSelect()
+                }
+              }
+            }
+          }
+        }
+        this.optionAlertShow = true
+      } else {
+        this.options = {
+          alert: false,
+          rowSelection: null
+        }
+        this.optionAlertShow = false
+      }
+    },
+    handleOk () {
+      // this.setTree()
+      this.$refs.table.refresh()
+    },
+    onSelectChange (selectedRowKeys, selectedRows) {
+      this.selectedRowKeys = selectedRowKeys
+      this.selectedRows = selectedRows
+    },
+    resetSearchForm () {
+      this.queryParam = {
+      }
+      this.$refs.table.refresh(true)
+    },
+    /**
+     * 设置设备类型树
+     */
+    base (record, queryParam = {}) {
+      this.visible = true
+      this.modalTitle = '选择设备'
+      this.queryParam = queryParam
+      if (this.isCreated) {
+        console.log(this.$refs.table)
+        this.$refs.table.clearSelected()
+        this.options.rowSelection.type = this.type
+        this.handleOk()
+      } else {
+        this.tableOption()
+        this.isCreated = true
+      }
+      // this.mySelect(this.selectedRowKeys, this.selectedRows)
+    },
+    handleCancel () {
+      this.visible = false
+      this.confirmLoading = false
+    },
+    handleSelect () {
+      if (this.selectedRowKeys.length === 0) {
+        this.$message.warn('请至少选择一项信息')
+      } else {
+        this.confirmLoading = true
+        this.$emit('selected', this.selectedRowKeys, this.selectedRows)
+        this.confirmLoading = false
+        this.visible = false
+      }
+    },
+    mySelect (selectedRowKeys, selectedRows) {
+      this.$refs.table.updateSelect(selectedRowKeys, selectedRows)
+      this.$refs.table.rowSelection.onChange(selectedRowKeys, selectedRows)
+    },
+    handleChange (value, label, extra) {
+      const data = this.treeData.find(item => item.id === value)
+      if (data && data.children && data.children.length > 0) {
+        this.typeList = data.children.map(item => item.id)
+      } else {
+        this.typeList = [value]
+      }
+    }
+  }
+}
+</script>