houshuai
8 天以前 763765958b36e99f33e3463ee0e17f8c6ad16c68
安灯模块开发
已添加9个文件
1417 ■■■■■ 文件已修改
src/views/andon/AndonButtonConfigList.vue 224 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/andon/AndonOrderList.vue 282 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/andon/AndonResponseConfigList.vue 197 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/andon/modules/AndonButtonConfigForm.vue 160 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/andon/modules/AndonButtonConfigModal.vue 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/andon/modules/AndonOrderForm.vue 209 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/andon/modules/AndonOrderModal.vue 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/andon/modules/AndonResponseConfigForm.vue 165 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/andon/modules/AndonResponseConfigModal.vue 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/andon/AndonButtonConfigList.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,224 @@
<template>
  <a-card :bordered="false">
    <!-- æŸ¥è¯¢åŒºåŸŸ -->
    <div class="table-page-search-wrapper">
      <a-form layout="inline" @keyup.enter.native="searchQuery">
        <a-row :gutter="24">
          <a-col :xl="6" :lg="7" :md="8" :sm="24">
            <a-form-item label="安灯名称">
              <j-input placeholder="请输入安灯名称" v-model="queryParam.buttonName"></j-input>
            </a-form-item>
          </a-col>
          <a-col :xl="6" :lg="7" :md="8" :sm="24">
            <a-form-item label="安灯编码">
              <j-input placeholder="请输入安灯编码" v-model="queryParam.buttonCode"></j-input>
            </a-form-item>
          </a-col>
          <a-col :xl="6" :lg="7" :md="8" :sm="24">
            <a-form-item label="安灯按钮状态">
              <j-dict-select-tag dictCode="button_status" placeholder="请输入安灯按钮状态" v-model="queryParam.buttonStatus"></j-dict-select-tag>
            </a-form-item>
          </a-col>
          <a-col :xl="6" :lg="7" :md="8" :sm="24">
            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
              <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
            </span>
          </a-col>
        </a-row>
      </a-form>
    </div>
    <!-- æŸ¥è¯¢åŒºåŸŸ-END -->
    <!-- æ“ä½œæŒ‰é’®åŒºåŸŸ -->
    <div class="table-operator">
      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
    </div>
    <!-- table区域-begin -->
    <div>
      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
        <i class="anticon anticon-info-circle ant-alert-icon"></i> å·²é€‰æ‹© <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
        <a style="margin-left: 24px" @click="onClearSelected">清空</a>
      </div>
      <a-table
        ref="table"
        size="middle"
        :scroll="{x:true}"
        bordered
        rowKey="id"
        :columns="columns"
        :dataSource="dataSource"
        :pagination="ipagination"
        :loading="loading"
        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
        class="j-table-force-nowrap"
        @change="handleTableChange">
        <template slot="htmlSlot" slot-scope="text">
          <div v-html="text"></div>
        </template>
        <template slot="imgSlot" slot-scope="text,record">
          <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
          <img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>
        </template>
        <template slot="fileSlot" slot-scope="text">
          <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
          <a-button
            v-else
            :ghost="true"
            type="primary"
            icon="download"
            size="small"
            @click="downloadFile(text)">
            ä¸‹è½½
          </a-button>
        </template>
        <span slot="action" slot-scope="text, record">
          <a @click="handleEdit(record)">编辑</a>
          <a-divider type="vertical" />
          <a-dropdown>
            <a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
            <a-menu slot="overlay">
              <a-menu-item>
                <a @click="handleDetail(record)">详情</a>
              </a-menu-item>
              <a-menu-item>
                <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
                  <a>删除</a>
                </a-popconfirm>
              </a-menu-item>
            </a-menu>
          </a-dropdown>
        </span>
      </a-table>
    </div>
    <andon-button-config-modal ref="modalForm" @ok="modalFormOk"></andon-button-config-modal>
  </a-card>
</template>
<script>
  import '@/assets/less/TableExpand.less'
  import { mixinDevice } from '@/utils/mixin'
  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
  import AndonButtonConfigModal from './modules/AndonButtonConfigModal'
  import {filterMultiDictText} from '@/components/dict/JDictSelectUtil'
  export default {
    name: 'AndonButtonConfigList',
    mixins:[JeecgListMixin, mixinDevice],
    components: {
      AndonButtonConfigModal
    },
    data () {
      return {
        description: '安灯按钮配置管理页面',
        // è¡¨å¤´
        columns: [
          {
            title: '#',
            dataIndex: '',
            key:'rowIndex',
            width:60,
            align:"center",
            customRender:function (t,r,index) {
              return parseInt(index)+1;
            }
          },
          {
            title:'安灯名称',
            align:"center",
            dataIndex: 'buttonName'
          },
          {
            title:'安灯编码',
            align:"center",
            dataIndex: 'buttonCode'
          },
          {
            title:'升级响应时长(分钟)',
            align:"center",
            dataIndex: 'upgradeResponseDuration'
          },
          {
            title:'升级处理时长(分钟)',
            align:"center",
            dataIndex: 'upgradeProcessDuration'
          },
          {
            title:'二次升级响应时长(分钟)',
            align:"center",
            dataIndex: 'secondUpgradeResponseDuration'
          },
          {
            title:'二次升级处理时长(分钟)',
            align:"center",
            dataIndex: 'secondUpgradeProcessDuration'
          },
          {
            title:'安灯按钮状态',
            align:"center",
            dataIndex: 'buttonStatus_dictText'
          },
          {
            title:'备注',
            align:"center",
            dataIndex: 'remark'
          },
          {
            title: '操作',
            dataIndex: 'action',
            align:"center",
            fixed:"right",
            width:147,
            scopedSlots: { customRender: 'action' }
          }
        ],
        url: {
          list: "/andonbuttonconfig/andonButtonConfig/list",
          delete: "/andonbuttonconfig/andonButtonConfig/delete",
          deleteBatch: "/andonbuttonconfig/andonButtonConfig/deleteBatch",
          exportXlsUrl: "/andonbuttonconfig/andonButtonConfig/exportXls",
          importExcelUrl: "andonbuttonconfig/andonButtonConfig/importExcel",
        },
        dictOptions:{},
        superFieldList:[],
      }
    },
    created() {
    this.getSuperFieldList();
    },
    computed: {
      importExcelUrl: function(){
        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
      },
    },
    methods: {
      initDictConfig(){
      },
      getSuperFieldList(){
        let fieldList=[];
        fieldList.push({type:'int',value:'delFlag',text:'删除标记',dictCode:''})
        fieldList.push({type:'string',value:'buttonName',text:'安灯名称',dictCode:''})
        fieldList.push({type:'string',value:'buttonCode',text:'安灯编码',dictCode:''})
        fieldList.push({type:'int',value:'upgradeResponseDuration',text:'升级响应时长(分钟)',dictCode:''})
        fieldList.push({type:'int',value:'upgradeProcessDuration',text:'升级处理时长(分钟)',dictCode:''})
        fieldList.push({type:'int',value:'secondUpgradeResponseDuration',text:'二次升级响应时长(分钟)',dictCode:''})
        fieldList.push({type:'int',value:'secondUpgradeProcessDuration',text:'二次升级处理时长(分钟)',dictCode:''})
        fieldList.push({type:'string',value:'buttonStatus',text:'安灯按钮状态',dictCode:'button_status'})
        fieldList.push({type:'string',value:'remark',text:'备注',dictCode:''})
        this.superFieldList = fieldList
      }
    }
  }
</script>
<style scoped>
  @import '~@assets/less/common.less';
</style>
src/views/andon/AndonOrderList.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,282 @@
<template>
  <a-card :bordered="false">
    <!-- æŸ¥è¯¢åŒºåŸŸ -->
    <div class="table-page-search-wrapper">
      <a-form layout="inline" @keyup.enter.native="searchQuery">
        <a-row :gutter="24">
          <a-col :xl="6" :lg="7" :md="8" :sm="24">
            <a-form-item label="安灯等级">
              <j-dict-select-tag dictCode="andon_level" placeholder="请输入安灯等级" v-model="queryParam.andonLevel"></j-dict-select-tag>
            </a-form-item>
          </a-col>
          <a-col :xl="6" :lg="7" :md="8" :sm="24">
            <a-form-item label="安灯状态">
              <j-dict-select-tag dictCode="order_status" placeholder="请输入安灯状态" v-model="queryParam.orderStatus"></j-dict-select-tag>
            </a-form-item>
          </a-col>
          <a-col :xl="6" :lg="7" :md="8" :sm="24">
            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
              <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
            </span>
          </a-col>
        </a-row>
      </a-form>
    </div>
    <!-- æŸ¥è¯¢åŒºåŸŸ-END -->
    <!-- æ“ä½œæŒ‰é’®åŒºåŸŸ -->
    <div class="table-operator">
      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
    </div>
    <!-- table区域-begin -->
    <div>
      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
        <i class="anticon anticon-info-circle ant-alert-icon"></i> å·²é€‰æ‹© <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
        <a style="margin-left: 24px" @click="onClearSelected">清空</a>
      </div>
      <a-table
        ref="table"
        size="middle"
        :scroll="{x:true}"
        bordered
        rowKey="id"
        :columns="columns"
        :dataSource="dataSource"
        :pagination="ipagination"
        :loading="loading"
        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
        class="j-table-force-nowrap"
        @change="handleTableChange">
        <template slot="htmlSlot" slot-scope="text">
          <div v-html="text"></div>
        </template>
        <template slot="imgSlot" slot-scope="text,record">
          <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
          <img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>
        </template>
        <template slot="fileSlot" slot-scope="text">
          <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
          <a-button
            v-else
            :ghost="true"
            type="primary"
            icon="download"
            size="small"
            @click="downloadFile(text)">
            ä¸‹è½½
          </a-button>
        </template>
        <span slot="action" slot-scope="text, record">
          <a @click="handleEdit(record)">编辑</a>
          <a-divider type="vertical" />
          <a-dropdown>
            <a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
            <a-menu slot="overlay">
              <a-menu-item>
                <a @click="handleDetail(record)">详情</a>
              </a-menu-item>
              <a-menu-item>
                <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
                  <a>删除</a>
                </a-popconfirm>
              </a-menu-item>
               <a-menu-item>
                <a @click="handleResponse(record)">响应(模拟)</a>
              </a-menu-item>
               <a-menu-item>
                <a @click="handleDispose(record)">处理(模拟)</a>
              </a-menu-item>
            </a-menu>
          </a-dropdown>
        </span>
      </a-table>
    </div>
    <andon-order-modal ref="modalForm" @ok="modalFormOk"></andon-order-modal>
  </a-card>
</template>
<script>
  import '@/assets/less/TableExpand.less'
  import { mixinDevice } from '@/utils/mixin'
  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
  import AndonOrderModal from './modules/AndonOrderModal'
  import {filterMultiDictText} from '@/components/dict/JDictSelectUtil'
  import { postAction } from '@api/manage'
  import store from '@/store'
  import JSelectFactory from '@comp/jeecgbiz/JSelectFactory.vue'
  export default {
    name: 'AndonOrderList',
    mixins:[JeecgListMixin, mixinDevice],
    components: {
      JSelectFactory,
      AndonOrderModal
    },
    data () {
      return {
        description: '安灯工单管理页面',
        // è¡¨å¤´
        columns: [
          {
            title: '#',
            dataIndex: '',
            key:'rowIndex',
            width:60,
            align:"center",
            customRender:function (t,r,index) {
              return parseInt(index)+1;
            }
          },
          {
            title:'产线',
            align:"center",
            dataIndex: 'factoryId_dictText'
          },
          {
            title:'安灯类型',
            align:"center",
            dataIndex: 'buttonId_dictText'
          },
          {
            title:'安灯人',
            align:"center",
            dataIndex: 'operator'
          },
          {
            title:'安灯时间',
            align:"center",
            dataIndex: 'operateTime'
          },
          {
            title:'安灯等级',
            align:"center",
            dataIndex: 'andonLevel_dictText'
          },
          {
            title:'响应人',
            align:"center",
            dataIndex: 'responder'
          },
          {
            title:'响应时间',
            align:"center",
            dataIndex: 'responseTime'
          },
          {
            title:'处理人',
            align:"center",
            dataIndex: 'processor'
          },
          {
            title:'处理完成时间',
            align:"center",
            dataIndex: 'processTime'
          },
          {
            title:'安灯状态',
            align:"center",
            dataIndex: 'orderStatus_dictText'
          },
          {
            title:'问题描述',
            align:"center",
            dataIndex: 'problemDescreption'
          },
          {
            title:'处理结果描述',
            align:"center",
            dataIndex: 'resolutionDescreption'
          },
          {
            title:'处理结果图片',
            align:"center",
            dataIndex: 'imageFiles',
            scopedSlots: {customRender: 'imgSlot'}
          },
          {
            title: '操作',
            dataIndex: 'action',
            align:"center",
            fixed:"right",
            width:147,
            scopedSlots: { customRender: 'action' }
          }
        ],
        url: {
          list: "/andonorder/andonOrder/list",
          delete: "/andonorder/andonOrder/delete",
          deleteBatch: "/andonorder/andonOrder/deleteBatch",
          exportXlsUrl: "/andonorder/andonOrder/exportXls",
          importExcelUrl: "andonorder/andonOrder/importExcel",
          edit:"/andonorder/andonOrder/edit"
        },
        dictOptions:{},
        superFieldList:[],
      }
    },
    created() {
    this.getSuperFieldList();
    },
    computed: {
      importExcelUrl: function(){
        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
      },
    },
    methods: {
      handleResponse(record){
        //获取当前时间
        const now = new Date();
        const formattedTime = `${now.getFullYear()}-${(now.getMonth()+1).toString().padStart(2,'0')}-${now.getDate().toString().padStart(2,'0')} ${now.getHours().toString().padStart(2,'0')}:${now.getMinutes().toString().padStart(2,'0')}:${now.getSeconds().toString().padStart(2,'0')}`;
        record.orderStatus = "2"
        record.andonLevel = "1"
        record.responseTime = formattedTime
        record.responder = store.getters.userInfo.username
        postAction(this.url.edit,record)
        this.loadData()
      },
      handleDispose(record){
        const now = new Date();
        const formattedTime = `${now.getFullYear()}-${(now.getMonth()+1).toString().padStart(2,'0')}-${now.getDate().toString().padStart(2,'0')} ${now.getHours().toString().padStart(2,'0')}:${now.getMinutes().toString().padStart(2,'0')}:${now.getSeconds().toString().padStart(2,'0')}`;
        record.orderStatus = "3"
        record.andonLevel = "1"
        record.processTime = formattedTime
        record.processor = store.getters.userInfo.username
        postAction(this.url.edit,record)
        this.loadData()
      },
      initDictConfig(){
      },
      getSuperFieldList(){
        let fieldList=[];
        fieldList.push({type:'int',value:'delFlag',text:'删除标记',dictCode:''})
        fieldList.push({type:'string',value:'factoryId',text:'产线ID',dictCode:''})
        fieldList.push({type:'string',value:'buttonId',text:'安灯类型',dictCode:''})
        fieldList.push({type:'string',value:'operator',text:'安灯人',dictCode:''})
        fieldList.push({type:'datetime',value:'operateTime',text:'安灯时间'})
        fieldList.push({type:'string',value:'andonLevel',text:'安灯等级',dictCode:'andon_level'})
        fieldList.push({type:'string',value:'responder',text:'响应人',dictCode:''})
        fieldList.push({type:'datetime',value:'responseTime',text:'响应时间'})
        fieldList.push({type:'string',value:'processor',text:'处理人',dictCode:''})
        fieldList.push({type:'datetime',value:'processTime',text:'处理完成时间'})
        fieldList.push({type:'string',value:'orderStatus',text:'安灯状态',dictCode:'order_status'})
        fieldList.push({type:'string',value:'problemDescreption',text:'问题描述',dictCode:''})
        fieldList.push({type:'string',value:'resolutionDescreption',text:'处理结果描述',dictCode:''})
        fieldList.push({type:'Text',value:'imageFiles',text:'处理结果图片',dictCode:''})
        this.superFieldList = fieldList
      }
    }
  }
</script>
<style scoped>
  @import '~@assets/less/common.less';
</style>
src/views/andon/AndonResponseConfigList.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,197 @@
<template>
  <a-card :bordered="false">
    <!-- æŸ¥è¯¢åŒºåŸŸ -->
    <div class="table-page-search-wrapper">
      <a-form layout="inline" @keyup.enter.native="searchQuery">
        <a-row :gutter="24">
          <a-col :xl="6" :lg="7" :md="8" :sm="24">
            <a-form-item label="安灯类型">
              <j-search-select-tag placeholder="请输入安灯类型" v-model="queryParam.buttonId"
                                   dict="andon_button_config,button_name,id"
              ></j-search-select-tag>
            </a-form-item>
          </a-col>
          <a-col :xl="6" :lg="7" :md="8" :sm="24">
            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
              <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
            </span>
          </a-col>
        </a-row>
      </a-form>
    </div>
    <!-- æŸ¥è¯¢åŒºåŸŸ-END -->
    <!-- æ“ä½œæŒ‰é’®åŒºåŸŸ -->
    <div class="table-operator">
      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
    </div>
    <!-- table区域-begin -->
    <div>
      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
        <i class="anticon anticon-info-circle ant-alert-icon"></i> å·²é€‰æ‹© <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
        <a style="margin-left: 24px" @click="onClearSelected">清空</a>
      </div>
      <a-table
        ref="table"
        size="middle"
        :scroll="{x:true}"
        bordered
        rowKey="id"
        :columns="columns"
        :dataSource="dataSource"
        :pagination="ipagination"
        :loading="loading"
        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
        class="j-table-force-nowrap"
        @change="handleTableChange">
        <template slot="htmlSlot" slot-scope="text">
          <div v-html="text"></div>
        </template>
        <template slot="imgSlot" slot-scope="text,record">
          <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
          <img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>
        </template>
        <template slot="fileSlot" slot-scope="text">
          <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
          <a-button
            v-else
            :ghost="true"
            type="primary"
            icon="download"
            size="small"
            @click="downloadFile(text)">
            ä¸‹è½½
          </a-button>
        </template>
        <span slot="action" slot-scope="text, record">
          <a @click="handleEdit(record)">编辑</a>
          <a-divider type="vertical" />
          <a-dropdown>
            <a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
            <a-menu slot="overlay">
              <a-menu-item>
                <a @click="handleDetail(record)">详情</a>
              </a-menu-item>
              <a-menu-item>
                <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
                  <a>删除</a>
                </a-popconfirm>
              </a-menu-item>
            </a-menu>
          </a-dropdown>
        </span>
      </a-table>
    </div>
    <andon-response-config-modal ref="modalForm" @ok="modalFormOk"></andon-response-config-modal>
  </a-card>
</template>
<script>
  import '@/assets/less/TableExpand.less'
  import { mixinDevice } from '@/utils/mixin'
  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
  import AndonResponseConfigModal from './modules/AndonResponseConfigModal'
  export default {
    name: 'AndonResponseConfigList',
    mixins:[JeecgListMixin, mixinDevice],
    components: {
      AndonResponseConfigModal
    },
    data () {
      return {
        description: '安灯响应配置管理页面',
        // è¡¨å¤´
        columns: [
          {
            title: '#',
            dataIndex: '',
            key:'rowIndex',
            width:60,
            align:"center",
            customRender:function (t,r,index) {
              return parseInt(index)+1;
            }
          },
          {
            title:'产线ID',
            align:"center",
            dataIndex: 'factoryId_dictText'
          },
          {
            title:'安灯类型',
            align:"center",
            dataIndex: 'buttonId_dictText'
          },
          {
            title:'初始响应人',
            align:"center",
            dataIndex: 'firsterResponder'
          },
          {
            title:'二级响应人(升级一次)',
            align:"center",
            dataIndex: 'secondResponder'
          },
          {
            title:'三级响应人(升级两次)',
            align:"center",
            dataIndex: 'thirdResponder'
          },
          {
            title: '操作',
            dataIndex: 'action',
            align:"center",
            fixed:"right",
            width:147,
            scopedSlots: { customRender: 'action' }
          }
        ],
        url: {
          list: "/andonresponseconfig/andonResponseConfig/list",
          delete: "/andonresponseconfig/andonResponseConfig/delete",
          deleteBatch: "/andonresponseconfig/andonResponseConfig/deleteBatch",
          exportXlsUrl: "/andonresponseconfig/andonResponseConfig/exportXls",
          importExcelUrl: "andonresponseconfig/andonResponseConfig/importExcel",
        },
        dictOptions:{},
        superFieldList:[],
      }
    },
    created() {
    this.getSuperFieldList();
    },
    computed: {
      importExcelUrl: function(){
        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
      },
    },
    methods: {
      initDictConfig(){
      },
      getSuperFieldList(){
        let fieldList=[];
        fieldList.push({type:'int',value:'delFlag',text:'删除标记',dictCode:''})
        fieldList.push({type:'string',value:'factoryId',text:'产线ID',dictCode:''})
        fieldList.push({type:'string',value:'buttonId',text:'安灯类型',dictCode:''})
        fieldList.push({type:'string',value:'firsterResponder',text:'初始响应人',dictCode:''})
        fieldList.push({type:'string',value:'secondResponder',text:'二级响应人(升级一次)',dictCode:''})
        fieldList.push({type:'string',value:'thirdResponder',text:'三级响应人(升级两次)',dictCode:''})
        this.superFieldList = fieldList
      }
    }
  }
</script>
<style scoped>
  @import '~@assets/less/common.less';
</style>
src/views/andon/modules/AndonButtonConfigForm.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,160 @@
<template>
  <a-spin :spinning="confirmLoading">
    <j-form-container :disabled="formDisabled">
      <a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
        <a-row>
          <a-col :span="12">
            <a-form-model-item label="安灯名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="buttonName">
              <a-input v-model="model.buttonName" placeholder="请输入安灯名称"  ></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="安灯编码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="buttonCode">
              <a-input v-model="model.buttonCode" placeholder="请输入安灯编码"  ></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="升级响应时长(分钟)" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="upgradeResponseDuration">
              <a-input-number v-model="model.upgradeResponseDuration" placeholder="请输入升级响应时长(分钟)" style="width: 100%" />
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="升级处理时长(分钟)" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="upgradeProcessDuration">
              <a-input-number v-model="model.upgradeProcessDuration" placeholder="请输入升级处理时长(分钟)" style="width: 100%" />
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="二次升级响应时长(分钟)" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="secondUpgradeResponseDuration">
              <a-input-number v-model="model.secondUpgradeResponseDuration" placeholder="请输入二次升级响应时长(分钟)" style="width: 100%" />
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="二次升级处理时长(分钟)" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="secondUpgradeProcessDuration">
              <a-input-number v-model="model.secondUpgradeProcessDuration" placeholder="请输入二次升级处理时长(分钟)" style="width: 100%" />
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="安灯按钮状态" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="buttonStatus">
              <j-dict-select-tag type="list" v-model="model.buttonStatus" dictCode="button_status" placeholder="请选择安灯按钮状态" />
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="备注" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark">
              <a-input v-model="model.remark" placeholder="请输入备注"  ></a-input>
            </a-form-model-item>
          </a-col>
        </a-row>
      </a-form-model>
    </j-form-container>
  </a-spin>
</template>
<script>
  import { httpAction, getAction } from '@/api/manage'
  import { validateDuplicateValue } from '@/utils/util'
  export default {
    name: 'AndonButtonConfigForm',
    components: {
    },
    props: {
      //表单禁用
      disabled: {
        type: Boolean,
        default: false,
        required: false
      }
    },
    data () {
      return {
        model:{
         },
        labelCol: {
          xs: { span: 24 },
          sm: { span: 5 },
        },
        wrapperCol: {
          xs: { span: 24 },
          sm: { span: 16 },
        },
        confirmLoading: false,
        validatorRules: {
          buttonName: [
            { required: true, message: '安灯名称是必选项', trigger: 'change' }
          ],
          buttonCode: [
            { required: true, message: '安灯编码是必选项', trigger: 'change' }
          ],
          upgradeResponseDuration: [
            { required: true, message: '升级响应时长是必选项', trigger: 'change' }
          ],
          upgradeProcessDuration: [
            { required: true, message: '升级处理时长是必选项', trigger: 'change' }
          ],
          secondUpgradeResponseDuration: [
            { required: true, message: '二次升级响应时长是必选项', trigger: 'change' }
          ],
          secondUpgradeProcessDuration: [
            { required: true, message: '二次升级处理时长是必选项', trigger: 'change' }
          ],
          buttonStatus: [
            { required: true, message: '安灯按钮状态是必选项', trigger: 'change' }
          ],
        },
        url: {
          add: "/andonbuttonconfig/andonButtonConfig/add",
          edit: "/andonbuttonconfig/andonButtonConfig/edit",
          queryById: "/andonbuttonconfig/andonButtonConfig/queryById"
        }
      }
    },
    computed: {
      formDisabled(){
        return this.disabled
      },
    },
    created () {
       //备份model原始值
      this.modelDefault = JSON.parse(JSON.stringify(this.model));
    },
    methods: {
      add () {
        this.edit(this.modelDefault);
      },
      edit (record) {
        this.model = Object.assign({}, record);
        this.visible = true;
      },
      submitForm () {
        const that = this;
        // è§¦å‘表单验证
        this.$refs.form.validate(valid => {
          if (valid) {
            that.confirmLoading = true;
            let httpurl = '';
            let method = '';
            if(!this.model.id){
              httpurl+=this.url.add;
              method = 'post';
            }else{
              httpurl+=this.url.edit;
               method = 'put';
            }
            httpAction(httpurl,this.model,method).then((res)=>{
              if(res.success){
                that.$message.success(res.message);
                that.$emit('ok');
              }else{
                that.$message.warning(res.message);
              }
            }).finally(() => {
              that.confirmLoading = false;
            })
          }
        })
      },
    }
  }
</script>
src/views/andon/modules/AndonButtonConfigModal.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,60 @@
<template>
  <j-modal
    :title="title"
    :width="width"
    :visible="visible"
    switchFullscreen
    @ok="handleOk"
    :okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
    @cancel="handleCancel"
    cancelText="关闭">
    <andon-button-config-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></andon-button-config-form>
  </j-modal>
</template>
<script>
  import AndonButtonConfigForm from './AndonButtonConfigForm'
  export default {
    name: 'AndonButtonConfigModal',
    components: {
      AndonButtonConfigForm
    },
    data () {
      return {
        title:'',
        width:896,
        visible: false,
        disableSubmit: false
      }
    },
    methods: {
      add () {
        this.visible=true
        this.$nextTick(()=>{
          this.$refs.realForm.add();
        })
      },
      edit (record) {
        this.visible=true
        this.$nextTick(()=>{
          this.$refs.realForm.edit(record);
        })
      },
      close () {
        this.$emit('close');
        this.visible = false;
      },
      handleOk () {
        this.$refs.realForm.submitForm();
      },
      submitCallback(){
        this.$emit('ok');
        this.visible = false;
      },
      handleCancel () {
        this.close()
      }
    }
  }
</script>
src/views/andon/modules/AndonOrderForm.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,209 @@
<template>
  <a-spin :spinning="confirmLoading">
    <j-form-container :disabled="formDisabled">
      <a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
        <a-row>
          <a-col :span="24">
            <a-form-model-item label="产线" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="factoryId">
              <a-row :gutter="24">
                <a-col :span="24">
                  <a-form-item
                    :labelCol="labelCol"
                    :wrapperCol="wrapperCol"
                    label=""
                  >
                    <j-select-factory
                      :disabled="disabled"
                      v-model="model.factoryId"
                      :multi="true"
                      @back="backFactoryInfo"
                      :backProduction="true"
                      :treeProductOpera="true"
                    ></j-select-factory>
                  </a-form-item>
                </a-col>
              </a-row>
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="安灯类型" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="buttonId">
              <j-search-select-tag v-model="model.buttonId" placeholder="请输入安灯类型"
                                   dict="andon_button_config,button_name,id"></j-search-select-tag>
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="安灯人" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="operator">
              <j-select-user-by-dep :multi="false" v-model="model.operator" placeholder="请输入安灯人"  ></j-select-user-by-dep>
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="安灯时间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="operateTime">
              <j-date placeholder="请选择安灯时间"  v-model="model.operateTime" :show-time="true" date-format="YYYY-MM-DD HH:mm:ss" style="width: 100%" />
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="安灯等级" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="andonLevel">
              <j-dict-select-tag type="list" v-model="model.andonLevel" dictCode="andon_level" placeholder="请选择安灯等级" />
            </a-form-model-item>
          </a-col>
<!--          <a-col :span="12">-->
<!--            <a-form-model-item label="响应人" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="responder">-->
<!--              <j-select-user-by-dep v-model="model.responder" placeholder="请输入响应人"  ></j-select-user-by-dep>-->
<!--            </a-form-model-item>-->
<!--          </a-col>-->
<!--          <a-col :span="12">-->
<!--            <a-form-model-item label="响应时间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="responseTime">-->
<!--              <j-date placeholder="请选择响应时间"  v-model="model.responseTime" :show-time="true" date-format="YYYY-MM-DD HH:mm:ss" style="width: 100%" />-->
<!--            </a-form-model-item>-->
<!--          </a-col>-->
<!--          <a-col :span="12">-->
<!--            <a-form-model-item label="处理人" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="processor">-->
<!--              <j-select-user-by-dep v-model="model.processor" placeholder="请输入处理人"  ></j-select-user-by-dep>-->
<!--            </a-form-model-item>-->
<!--          </a-col>-->
<!--          <a-col :span="12">-->
<!--            <a-form-model-item label="处理完成时间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="processTime">-->
<!--              <j-date placeholder="请选择处理完成时间"  v-model="model.processTime" :show-time="true" date-format="YYYY-MM-DD HH:mm:ss" style="width: 100%" />-->
<!--            </a-form-model-item>-->
<!--          </a-col>-->
          <a-col :span="12">
            <a-form-model-item label="安灯状态" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="orderStatus">
              <j-dict-select-tag type="list" v-model="model.orderStatus" dictCode="order_status" placeholder="请选择安灯状态" />
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="问题描述" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="problemDescreption">
              <a-textarea v-model="model.problemDescreption" rows="4" placeholder="请输入问题描述" />
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="处理结果描述" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="resolutionDescreption">
              <a-textarea v-model="model.resolutionDescreption" rows="4" placeholder="请输入处理结果描述" />
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="处理结果图片" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="imageFiles">
              <j-image-upload isMultiple  v-model="model.imageFiles" ></j-image-upload>
            </a-form-model-item>
          </a-col>
        </a-row>
      </a-form-model>
    </j-form-container>
  </a-spin>
</template>
<script>
  import { httpAction, getAction } from '@/api/manage'
  import { validateDuplicateValue } from '@/utils/util'
  import JSelectFactory from '@comp/jeecgbiz/JSelectFactory.vue'
  export default {
    name: 'AndonOrderForm',
    components: {
      JSelectFactory
    },
    props: {
      //表单禁用
      disabled: {
        type: Boolean,
        default: false,
        required: false
      }
    },
    data () {
      return {
        model:{
         },
        labelCol: {
          xs: { span: 24 },
          sm: { span: 5 },
        },
        wrapperCol: {
          xs: { span: 24 },
          sm: { span: 16 },
        },
        confirmLoading: false,
        validatorRules: {
          factoryId: [
            { required: true, message: '产线是必选项', trigger: 'change' }
          ],
          buttonId: [
            { required: true, message: '安灯类型是必选项', trigger: 'change' }
          ],
          operator: [
            { required: true, message: '安灯人是必选项', trigger: 'change' }
          ],
          operateTime: [
            { required: true, message: '安灯时间是必选项', trigger: 'change' }
          ],
          andonLevel: [
            { required: true, message: '安灯等级是必选项', trigger: 'change' }
          ],
          orderStatus: [
            { required: true, message: '安灯状态是必选项', trigger: 'change' }
          ],
        },
        url: {
          add: "/andonorder/andonOrder/add",
          edit: "/andonorder/andonOrder/edit",
          queryById: "/andonorder/andonOrder/queryById"
        }
      }
    },
    computed: {
      formDisabled(){
        return this.disabled
      },
    },
    created () {
       //备份model原始值
      this.modelDefault = JSON.parse(JSON.stringify(this.model));
    },
    methods: {
      backFactoryInfo(info) {
        this.model.factoryIds = this.model.factoryId
        this.nextFactoryOptions = info.map((item, index, arr) => {
          let c = { label: item.text, value: item.value + '' }
          return c
        })
      },
      add () {
        this.edit(this.modelDefault);
      },
      edit (record) {
        this.model = Object.assign({}, record);
        this.visible = true;
      },
      submitForm () {
        const that = this;
        // è§¦å‘表单验证
        this.$refs.form.validate(valid => {
          if (valid) {
            that.confirmLoading = true;
            let httpurl = '';
            let method = '';
            if(!this.model.id){
              httpurl+=this.url.add;
              method = 'post';
            }else{
              httpurl+=this.url.edit;
               method = 'put';
            }
            httpAction(httpurl,this.model,method).then((res)=>{
              if(res.success){
                that.$message.success(res.message);
                that.$emit('ok');
              }else{
                that.$message.warning(res.message);
              }
            }).finally(() => {
              that.confirmLoading = false;
            })
          }
        })
      },
    }
  }
</script>
src/views/andon/modules/AndonOrderModal.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,60 @@
<template>
  <j-modal
    :title="title"
    :width="width"
    :visible="visible"
    switchFullscreen
    @ok="handleOk"
    :okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
    @cancel="handleCancel"
    cancelText="关闭">
    <andon-order-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></andon-order-form>
  </j-modal>
</template>
<script>
  import AndonOrderForm from './AndonOrderForm'
  export default {
    name: 'AndonOrderModal',
    components: {
      AndonOrderForm
    },
    data () {
      return {
        title:'',
        width:896,
        visible: false,
        disableSubmit: false
      }
    },
    methods: {
      add () {
        this.visible=true
        this.$nextTick(()=>{
          this.$refs.realForm.add();
        })
      },
      edit (record) {
        this.visible=true
        this.$nextTick(()=>{
          this.$refs.realForm.edit(record);
        })
      },
      close () {
        this.$emit('close');
        this.visible = false;
      },
      handleOk () {
        this.$refs.realForm.submitForm();
      },
      submitCallback(){
        this.$emit('ok');
        this.visible = false;
      },
      handleCancel () {
        this.close()
      }
    }
  }
</script>
src/views/andon/modules/AndonResponseConfigForm.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,165 @@
<template>
  <a-spin :spinning="confirmLoading">
    <j-form-container :disabled="formDisabled">
      <a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
        <a-row>
          <a-col :span="24">
            <a-form-model-item label="产线" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="factoryId">
              <a-row :gutter="24">
                <a-col :span="24">
                  <a-form-item
                    :labelCol="labelCol"
                    :wrapperCol="wrapperCol"
                    label=""
                  >
                    <j-select-factory
                      :disabled="disabled"
                      v-model="model.factoryId"
                      :multi="true"
                      @back="backFactoryInfo"
                      :backProduction="true"
                      :treeProductOpera="true"
                    ></j-select-factory>
                  </a-form-item>
                </a-col>
              </a-row>
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="安灯类型" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="buttonId">
              <j-search-select-tag v-model="model.buttonId" placeholder="请输入安灯类型"
                                   dict="andon_button_config,button_name,id"></j-search-select-tag>
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="初始响应人" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="firsterResponder">
              <j-select-user-by-dep :multi="false" v-model="model.firsterResponder" placeholder="请输入初始响应人"  ></j-select-user-by-dep>
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="二级响应人(升级一次)" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="secondResponder">
              <j-select-user-by-dep :multi="false" v-model="model.secondResponder" placeholder="请输入二级响应人(升级一次)"  ></j-select-user-by-dep>
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="三级响应人(升级两次)" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="thirdResponder">
              <j-select-user-by-dep :multi="false" v-model="model.thirdResponder" placeholder="请输入三级响应人(升级两次)"  ></j-select-user-by-dep>
            </a-form-model-item>
          </a-col>
        </a-row>
      </a-form-model>
    </j-form-container>
  </a-spin>
</template>
<script>
  import { httpAction, getAction } from '@/api/manage'
  import { validateDuplicateValue } from '@/utils/util'
  import JSelectFactory from '@comp/jeecgbiz/JSelectFactory.vue'
  export default {
    name: 'AndonResponseConfigForm',
    components: {
      JSelectFactory
    },
    props: {
      //表单禁用
      disabled: {
        type: Boolean,
        default: false,
        required: false
      }
    },
    data () {
      return {
        model:{
         },
        labelCol: {
          xs: { span: 24 },
          sm: { span: 5 },
        },
        wrapperCol: {
          xs: { span: 24 },
          sm: { span: 16 },
        },
        confirmLoading: false,
        validatorRules: {
          factoryId: [
            { required: true, message: '产线是必选项', trigger: 'change' }
          ],
          buttonId: [
            { required: true, message: '安灯类型是必选项', trigger: 'change' }
          ],
          firsterResponder: [
            { required: true, message: '初始响应人是必选项', trigger: 'change' }
          ],
          secondResponder: [
            { required: true, message: '二级响应人是必选项', trigger: 'change' }
          ],
          thirdResponder: [
            { required: true, message: '三级响应人是必选项', trigger: 'change' }
          ],
        },
        url: {
          add: "/andonresponseconfig/andonResponseConfig/add",
          edit: "/andonresponseconfig/andonResponseConfig/edit",
          queryById: "/andonresponseconfig/andonResponseConfig/queryById"
        }
      }
    },
    computed: {
      formDisabled(){
        return this.disabled
      },
    },
    created () {
       //备份model原始值
      this.modelDefault = JSON.parse(JSON.stringify(this.model));
    },
    methods: {
      backFactoryInfo(info) {
        this.model.factoryIds = this.model.factoryId
        this.nextFactoryOptions = info.map((item, index, arr) => {
          let c = { label: item.text, value: item.value + '' }
          return c
        })
      },
      add () {
        this.edit(this.modelDefault);
      },
      edit (record) {
        this.model = Object.assign({}, record);
        this.visible = true;
      },
      submitForm () {
        const that = this;
        // è§¦å‘表单验证
        this.$refs.form.validate(valid => {
          if (valid) {
            that.confirmLoading = true;
            let httpurl = '';
            let method = '';
            if(!this.model.id){
              httpurl+=this.url.add;
              method = 'post';
            }else{
              httpurl+=this.url.edit;
               method = 'put';
            }
            httpAction(httpurl,this.model,method).then((res)=>{
              if(res.success){
                that.$message.success(res.message);
                that.$emit('ok');
              }else{
                that.$message.warning(res.message);
              }
            }).finally(() => {
              that.confirmLoading = false;
            })
          }
        })
      },
    }
  }
</script>
src/views/andon/modules/AndonResponseConfigModal.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,60 @@
<template>
  <j-modal
    :title="title"
    :width="width"
    :visible="visible"
    switchFullscreen
    @ok="handleOk"
    :okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
    @cancel="handleCancel"
    cancelText="关闭">
    <andon-response-config-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></andon-response-config-form>
  </j-modal>
</template>
<script>
  import AndonResponseConfigForm from './AndonResponseConfigForm'
  export default {
    name: 'AndonResponseConfigModal',
    components: {
      AndonResponseConfigForm
    },
    data () {
      return {
        title:'',
        width:896,
        visible: false,
        disableSubmit: false
      }
    },
    methods: {
      add () {
        this.visible=true
        this.$nextTick(()=>{
          this.$refs.realForm.add();
        })
      },
      edit (record) {
        this.visible=true
        this.$nextTick(()=>{
          this.$refs.realForm.edit(record);
        })
      },
      close () {
        this.$emit('close');
        this.visible = false;
      },
      handleOk () {
        this.$refs.realForm.submitForm();
      },
      submitCallback(){
        this.$emit('ok');
        this.visible = false;
      },
      handleCancel () {
        this.close()
      }
    }
  }
</script>