Parcourir la source

Merge remote-tracking branch 'origin/master'

110 il y a 1 an
Parent
commit
5f75c70743

+ 1 - 1
itdmWeb/src/components/layouts/UserLayout.vue

@@ -9,7 +9,7 @@
           </a>
         </div>
         <div class="desc">
-          致力于打造装备制造企业的一站式数字化工厂应用解决方案
+          致力于航空航天环境试验领域的数智化解决方案
         </div>
       </div>
 

+ 45 - 13
itdmWeb/src/views/module-iTDM/baogao/ItdmBaogaoList.vue

@@ -4,24 +4,25 @@
     <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="委托编号">
-              <a-input placeholder="请输入委托编号" v-model="queryParam.weituoNo"></a-input>
+
+            <a-form-item label="委托单位名称">
+              <j-search-select-tag placeholder="请选择委托单位名称" v-model="queryParam.weituoClient"
+                                   :dictOptions="weituoClientList"  @change="handlewcChange" />
             </a-form-item>
           </a-col>
           <a-col :xl="6" :lg="7" :md="8" :sm="24">
-            <a-form-item label="委托单位名称">
-              <a-input placeholder="请输入委托单位名称" v-model="queryParam.weituoClient"></a-input>
+            <a-form-item label="委托编号">
+              <j-search-select-tag placeholder="请选择委托编号"  v-model="queryParam.weituoNo"  :dictOptions="weituoNoList" />
             </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>
-              <a @click="handleToggleSearch" style="margin-left: 8px">
-                {{ toggleSearchStatus ? '收起' : '展开' }}
-                <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
-              </a>
             </span>
           </a-col>
         </a-row>
@@ -130,6 +131,8 @@ export default {
   },
   data() {
     return {
+      weituoClientList: [],
+      weituoNoList: [],
       description: '报告生成管理页面',
       // 表头
       columns: [
@@ -164,14 +167,14 @@ export default {
         {
           title: '报告模板',
           align: 'center',
-          dataIndex: 'baogaoType_dictText',
+          dataIndex: 'baogaoType_dictText'
 
         },
         {
           title: '报告文件地址',
           align: 'center',
           dataIndex: 'filePath',
-          scopedSlots: {customRender: 'fileSlot'}
+          scopedSlots: { customRender: 'fileSlot' }
 
         },
         {
@@ -205,9 +208,38 @@ export default {
     }
   },
   methods: {
-    wordedit(record){
-      this.$refs.wordedit.edit(record);
-      this.$refs.wordedit.visible=true
+    handlewcChange(data){
+
+      var weituoClient={weituoClient:data}
+      getAction('/weituo/itdmWeituoInfo/weituoNoList', weituoClient).then((res) => {
+        if (res.success) {
+          console.log("xxxxxxxxxxxxxxxxxxx")
+          console.log(res.result)
+          this.weituoNoList = res.result.map(i=>{
+            return { value: i.weituoNo, text: i.weituoNo}
+          })
+          console.log(this.weituoNoList)
+        }
+      })
+
+    },
+
+    init() {
+
+      getAction('/weituo/itdmWeituoInfo/distinctClientList', {}).then((res) => {
+        if (res.success) {
+          console.log(res.result)
+          this.weituoClientList = res.result.map(i => {
+            return { value: i, text: i }
+          })
+          console.log(this.weituoClientList)
+        }
+      })
+
+    },
+    wordedit(record) {
+      this.$refs.wordedit.edit(record)
+      this.$refs.wordedit.visible = true
     },
 
     getSuperFieldList() {

+ 34 - 21
itdmWeb/src/views/module-iTDM/baogao/modules/ItdmBaogaoForm.vue

@@ -3,6 +3,12 @@
     <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">
+              <j-search-select-tag placeholder="请选择委托单位名称" :dictOptions="weituoClientList"
+                                   @change="handlewcChange" />
+            </a-form-model-item>
+          </a-col>
 
           <a-col :span="24">
             <a-form-model-item label="委托信息" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="weituoId">
@@ -73,23 +79,23 @@
           <a-col :span="24">
             <a-form-model-item label="报告类型" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="baogaoType">
 
-              <j-search-select-tag v-model="model.baogaoType" dict="itdm_moban,name,id"  />
+              <j-search-select-tag v-model="model.baogaoType" dict="itdm_moban,name,id" />
 
             </a-form-model-item>
           </a-col>
           <a-col :span="24">
             <a-form-model-item label="环境温度" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="wendu">
-              <a-input v-model="model.wendu" placeholder="请输入温度"  ></a-input>
+              <a-input v-model="model.wendu" placeholder="请输入温度"></a-input>
             </a-form-model-item>
           </a-col>
           <a-col :span="24">
             <a-form-model-item label="环境湿度" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="shidu">
-              <a-input v-model="model.shidu" placeholder="请输入湿度"  ></a-input>
+              <a-input v-model="model.shidu" placeholder="请输入湿度"></a-input>
             </a-form-model-item>
           </a-col>
           <a-col :span="24">
             <a-form-model-item label="环境大气压" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="daqiya">
-              <a-input v-model="model.daqiya" placeholder="请输入大气压"  ></a-input>
+              <a-input v-model="model.daqiya" placeholder="请输入大气压"></a-input>
             </a-form-model-item>
           </a-col>
 
@@ -117,7 +123,9 @@ export default {
   },
   data() {
     return {
-      yangppinLsDictOptions:[],
+      weituoClientList: [],
+
+      yangppinLsDictOptions: [],
       weituoDictOptions: [],
       yangppinDictOptions: [],
       model: {},
@@ -157,31 +165,39 @@ export default {
     }
   },
   created() {
-    this.load()
+    this.init()
     //备份model原始值
     this.modelDefault = JSON.parse(JSON.stringify(this.model))
   },
   methods: {
-    load() {
-      const select = {}
-      getAction('/baogao/itdmBaogao//weituo/list', select).then((res) => {
+
+    handlewcChange(data) {
+      var weituoClient = { weituoClient: data }
+
+      getAction('/weituo/itdmWeituoInfo/weituoNoList', weituoClient).then((res) => {
         if (res.success) {
           this.weituoDictOptions = res.result.map(i => {
-            const map = {}
-            map.text = i.weituoNo
-            map.value = i.id
-            return map
-          })
-          console.log(this.weituoDictOptions)
+            return { value: i.id, text: i.weituoNo }
 
-        } else {
-          this.$message.warning(res.message)
+          })
         }
       })
+
     },
 
+    init() {
 
+      getAction('/weituo/itdmWeituoInfo/distinctClientList', {}).then((res) => {
+        if (res.success) {
+          console.log(res.result)
+          this.weituoClientList = res.result.map(i => {
+            return { value: i, text: i }
+          })
+          console.log(this.weituoClientList)
+        }
+      })
 
+    },
 
     yangpmList(weituoId) {
       const select = { weituoId: weituoId }
@@ -193,7 +209,6 @@ export default {
             map.value = i.id
             return map
           })
-          console.log(this.weituoDictOptions)
 
         } else {
           this.$message.warning(res.message)
@@ -201,7 +216,6 @@ export default {
       })
     },
 
-
     queryShiyanList(yangpinIds) {
       const select = { 'yangpinIds': yangpinIds.toString() }
       getAction('/baogao/itdmBaogao/shiyan/list', select).then((res) => {
@@ -213,14 +227,13 @@ export default {
             return map
           })
 
-
         } else {
           this.$message.warning(res.message)
         }
       })
     },
 
-    handleYPChange(value){
+    handleYPChange(value) {
       console.log(value)
       this.queryShiyanList(value)
     },

+ 216 - 170
itdmWeb/src/views/module-iTDM/gongdandetail/ItdmGongdanDetailList.vue

@@ -5,41 +5,27 @@
       <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="工单id">
-              <a-input placeholder="请输入工单id" v-model="queryParam.woId"></a-input>
+            <a-form-item label="委托单位名称">
+              <j-search-select-tag placeholder="请选择委托单位名称" :dictOptions="weituoClientList"  @change="handlewcChange" />
             </a-form-item>
           </a-col>
+
+
           <a-col :xl="6" :lg="7" :md="8" :sm="24">
-            <a-form-item label="实绩设备id">
-              <a-input placeholder="请输入实绩设备id" v-model="queryParam.shijiShebeiId"></a-input>
+            <a-form-item label="委托编号">
+              <j-search-select-tag placeholder="请选择委托编号" :dictOptions="weituoNoList"  @change="handlewnChange" />
             </a-form-item>
           </a-col>
-          <template v-if="toggleSearchStatus">
-            <a-col :xl="6" :lg="7" :md="8" :sm="24">
-              <a-form-item label="实绩试验类型">
-                <j-dict-select-tag placeholder="请选择实绩试验类型" v-model="queryParam.shijiShiiyanType" dictCode="shiyan_type"/>
-              </a-form-item>
-            </a-col>
-            <a-col :xl="10" :lg="11" :md="12" :sm="24">
-              <a-form-item label="任务日期">
-                <j-date placeholder="请选择开始日期" class="query-group-cust" v-model="queryParam.workDate_begin"></j-date>
-                <span class="query-group-split-cust"></span>
-                <j-date placeholder="请选择结束日期" class="query-group-cust" v-model="queryParam.workDate_end"></j-date>
-              </a-form-item>
-            </a-col>
-            <a-col :xl="10" :lg="11" :md="12" :sm="24">
-              <a-form-item label="实绩任务日期">
-                <j-date placeholder="请选择开始日期" class="query-group-cust" v-model="queryParam.shijiWorkDate_begin"></j-date>
-                <span class="query-group-split-cust"></span>
-                <j-date placeholder="请选择结束日期" class="query-group-cust" v-model="queryParam.shijiWorkDate_end"></j-date>
-              </a-form-item>
-            </a-col>
-            <a-col :xl="6" :lg="7" :md="8" :sm="24">
-              <a-form-item label="状态">
-                <j-dict-select-tag placeholder="请选择状态" v-model="queryParam.status" dictCode="test_plan_status"/>
-              </a-form-item>
-            </a-col>
-          </template>
+
+
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="工单号">
+              <j-search-select-tag placeholder="工单号"  v-model="queryParam.woId" :dictOptions="gongdanList"   />
+            </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>
@@ -79,7 +65,8 @@
         </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;"/>
+          <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>
@@ -94,7 +81,7 @@
           </a-button>
         </template>
 
-        <span slot="action" slot-scope="text, record" >
+        <span slot="action" slot-scope="text, record">
 
           <a @click="handleEdit(record)">确认</a>
 
@@ -110,151 +97,210 @@
 
 <script>
 
-  import '@assets/less/TableExpand.less'
-  import { mixinDevice } from '@/utils/mixin'
-  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
-  import ItdmGongdanDetailModal from './modules/ItdmGongdanDetailModal'
-  import {filterMultiDictText} from '@comp/dict/JDictSelectUtil'
-
-  export default {
-    name: 'ItdmGongdanDetailList',
-    mixins:[JeecgListMixin, mixinDevice],
-    components: {
-      ItdmGongdanDetailModal
-    },
-    data () {
-      return {
-        description: '工单detail管理页面',
-        // 表头
-        columns: [
-          {
-            title: '#',
-            dataIndex: '',
-            key:'rowIndex',
-            width:60,
-            align:"center",
-            customRender:function (t,r,index) {
-              return parseInt(index)+1;
-            }
-          },
-          {
-            title:'工单id',
-            align:"center",
-            dataIndex: 'woId'
-          },
-          {
-            title:'实绩设备id',
-            align:"center",
-            dataIndex: 'shijiShebeiId_dictText'
-          },
-          {
-            title:'传感器',
-            align:"center",
-            dataIndex: 'chuanganqi_dictText'
-          },
-          {
-            title:'实绩试验类型',
-            align:"center",
-            dataIndex: 'shijiShiiyanType_dictText'
-          },
-          {
-            title:'任务日期',
-            align:"center",
-            dataIndex: 'workDate',
-            customRender:function (text) {
-              return !text?"":(text.length>10?text.substr(0,10):text)
-            }
-          },
-          {
-            title:'试验开始时间',
-            align:"center",
-            dataIndex: 'startTime'
-          },
-          {
-            title:'试验结束时间',
-            align:"center",
-            dataIndex: 'endTime'
-          },
-          {
-            title:'实绩任务日期',
-            align:"center",
-            dataIndex: 'shijiWorkDate',
-            customRender:function (text) {
-              return !text?"":(text.length>10?text.substr(0,10):text)
-            }
-          },
-          {
-            title:'实绩试验开始时间',
-            align:"center",
-            dataIndex: 'shijiStartTime'
-          },
-          {
-            title:'实绩试验结束时间',
-            align:"center",
-            dataIndex: 'shijiEndTime'
-          },
-          // {
-          //   title:'状态',
-          //   align:"center",
-          //   dataIndex: 'status_dictText'
-          // },
-          {
-            title:'备注',
-            align:"center",
-            dataIndex: 'remark'
-          },
-          {
-            title: '操作',
-            dataIndex: 'action',
-            align:"center",
-            fixed:"right",
-            width:147,
-            scopedSlots: { customRender: 'action' }
-          }
-        ],
-        url: {
-          list: "/gongdandetail/itdmGongdanDetail/list",
-          delete: "/gongdandetail/itdmGongdanDetail/delete",
-          deleteBatch: "/gongdandetail/itdmGongdanDetail/deleteBatch",
-          exportXlsUrl: "/gongdandetail/itdmGongdanDetail/exportXls",
-          importExcelUrl: "gongdandetail/itdmGongdanDetail/importExcel",
+import '@assets/less/TableExpand.less'
+import { mixinDevice } from '@/utils/mixin'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+import ItdmGongdanDetailModal from './modules/ItdmGongdanDetailModal'
+import { filterMultiDictText } from '@comp/dict/JDictSelectUtil'
+import { getAction } from '@api/manage'
+
+export default {
+  name: 'ItdmGongdanDetailList',
+  mixins: [JeecgListMixin, mixinDevice],
+  components: {
+    ItdmGongdanDetailModal
+  },
+  data() {
+    return {
+      weituoClientList:[],
+      weituoNoList:[],
+      gongdanList:[],
 
+
+      description: '工单detail管理页面',
+      // 表头
+      columns: [
+        {
+          title: '#',
+          dataIndex: '',
+          key: 'rowIndex',
+          width: 60,
+          align: 'center',
+          customRender: function(t, r, index) {
+            return parseInt(index) + 1
+          }
+        },
+        {
+          title: '工单id',
+          align: 'center',
+          dataIndex: 'woId'
+        },
+        {
+          title: '实绩设备id',
+          align: 'center',
+          dataIndex: 'shijiShebeiId_dictText'
+        },
+        {
+          title: '传感器',
+          align: 'center',
+          dataIndex: 'chuanganqi_dictText'
+        },
+        {
+          title: '实绩试验类型',
+          align: 'center',
+          dataIndex: 'shijiShiiyanType_dictText'
+        },
+        {
+          title: '任务日期',
+          align: 'center',
+          dataIndex: 'workDate',
+          customRender: function(text) {
+            return !text ? '' : (text.length > 10 ? text.substr(0, 10) : text)
+          }
+        },
+        {
+          title: '试验开始时间',
+          align: 'center',
+          dataIndex: 'startTime'
+        },
+        {
+          title: '试验结束时间',
+          align: 'center',
+          dataIndex: 'endTime'
+        },
+        {
+          title: '实绩任务日期',
+          align: 'center',
+          dataIndex: 'shijiWorkDate',
+          customRender: function(text) {
+            return !text ? '' : (text.length > 10 ? text.substr(0, 10) : text)
+          }
         },
-        dictOptions:{},
-        superFieldList:[],
-      }
+        {
+          title: '实绩试验开始时间',
+          align: 'center',
+          dataIndex: 'shijiStartTime'
+        },
+        {
+          title: '实绩试验结束时间',
+          align: 'center',
+          dataIndex: 'shijiEndTime'
+        },
+        // {
+        //   title:'状态',
+        //   align:"center",
+        //   dataIndex: 'status_dictText'
+        // },
+        {
+          title: '备注',
+          align: 'center',
+          dataIndex: 'remark'
+        },
+        {
+          title: '操作',
+          dataIndex: 'action',
+          align: 'center',
+          fixed: 'right',
+          width: 147,
+          scopedSlots: { customRender: 'action' }
+        }
+      ],
+      url: {
+        list: '/gongdandetail/itdmGongdanDetail/list',
+        delete: '/gongdandetail/itdmGongdanDetail/delete',
+        deleteBatch: '/gongdandetail/itdmGongdanDetail/deleteBatch',
+        exportXlsUrl: '/gongdandetail/itdmGongdanDetail/exportXls',
+        importExcelUrl: 'gongdandetail/itdmGongdanDetail/importExcel'
+
+      },
+      dictOptions: {},
+      superFieldList: []
+    }
+  },
+  created() {
+    this.getSuperFieldList()
+    this.init()
+  },
+  computed: {
+    importExcelUrl: function() {
+      return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
+    }
+  },
+  methods: {
+    init(){
+
+      getAction('/weituo/itdmWeituoInfo/distinctClientList', {}).then((res) => {
+        if (res.success) {
+          console.log(res.result)
+          this.weituoClientList = res.result.map(i=>{
+            return { value: i, text: i}
+          })
+          console.log(this.weituoClientList)
+        }
+      })
+
+
     },
-    created() {
-    this.getSuperFieldList();
+
+    handlewcChange(data){
+
+      var weituoClient={weituoClient:data}
+      getAction('/weituo/itdmWeituoInfo/weituoNoList', weituoClient).then((res) => {
+        if (res.success) {
+          console.log("xxxxxxxxxxxxxxxxxxx")
+          console.log(res.result)
+          this.weituoNoList = res.result.map(i=>{
+            return { value: i.id, text: i.weituoNo}
+          })
+          console.log(this.weituoNoList)
+        }
+      })
+
+
+
+
+      console.log(data)
     },
-    computed: {
-      importExcelUrl: function(){
-        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
-      },
+
+    handlewnChange(data){
+
+      var weituoClient={weituoId:data}
+      getAction('/gongdandetail/itdmGongdanDetail/gongdanIdList', weituoClient).then((res) => {
+        if (res.success) {
+          console.log("xxxxxxxxxxxxxxxxxxx")
+          console.log(res.result)
+          this.gongdanList = res.result.map(i=>{
+            return { value: i, text: i}
+          })
+          console.log(this.gongdanList)
+        }
+      })
+
+
+
     },
-    methods: {
-      initDictConfig(){
-      },
-      getSuperFieldList(){
-        let fieldList=[];
-        fieldList.push({type:'string',value:'woId',text:'工单id',dictCode:''})
-        fieldList.push({type:'string',value:'shijiShebeiId_dictText',text:'实绩设备id'})
-        fieldList.push({type:'string',value:'chuanganqi_dictText',text:'传感器'})
-
-        fieldList.push({type:'int',value:'shijiShiiyanType_dictText',text:'实绩试验类型',dictCode:'shiyan_type'})
-        fieldList.push({type:'date',value:'workDate',text:'任务日期'})
-        fieldList.push({type:'string',value:'startTime',text:'试验开始时间',dictCode:''})
-        fieldList.push({type:'string',value:'endTime',text:'试验结束时间',dictCode:''})
-        fieldList.push({type:'date',value:'shijiWorkDate',text:'实绩任务日期'})
-        fieldList.push({type:'string',value:'shijiStartTime',text:'实绩试验开始时间',dictCode:''})
-        fieldList.push({type:'string',value:'shijiEndTime',text:'实绩试验结束时间',dictCode:''})
-        // fieldList.push({type:'int',value:'status',text:'状态',dictCode:'test_plan_status'})
-        fieldList.push({type:'string',value:'remark',text:'备注',dictCode:''})
-        this.superFieldList = fieldList
-      }
+    initDictConfig() {
+    },
+    getSuperFieldList() {
+      let fieldList = []
+      fieldList.push({ type: 'string', value: 'woId', text: '工单id', dictCode: '' })
+      fieldList.push({ type: 'string', value: 'shijiShebeiId_dictText', text: '实绩设备id' })
+      fieldList.push({ type: 'string', value: 'chuanganqi_dictText', text: '传感器' })
+
+      fieldList.push({ type: 'int', value: 'shijiShiiyanType_dictText', text: '实绩试验类型', dictCode: 'shiyan_type' })
+      fieldList.push({ type: 'date', value: 'workDate', text: '任务日期' })
+      fieldList.push({ type: 'string', value: 'startTime', text: '试验开始时间', dictCode: '' })
+      fieldList.push({ type: 'string', value: 'endTime', text: '试验结束时间', dictCode: '' })
+      fieldList.push({ type: 'date', value: 'shijiWorkDate', text: '实绩任务日期' })
+      fieldList.push({ type: 'string', value: 'shijiStartTime', text: '实绩试验开始时间', dictCode: '' })
+      fieldList.push({ type: 'string', value: 'shijiEndTime', text: '实绩试验结束时间', dictCode: '' })
+      // fieldList.push({type:'int',value:'status',text:'状态',dictCode:'test_plan_status'})
+      fieldList.push({ type: 'string', value: 'remark', text: '备注', dictCode: '' })
+      this.superFieldList = fieldList
     }
   }
+}
 </script>
 <style scoped>
-  @import '~@assets/less/common.less';
+@import '~@assets/less/common.less';
 </style>

+ 10 - 0
itdmWeb/src/views/module-iTDM/gongdandetail/modules/ItdmGongdanDetailForm.vue

@@ -133,6 +133,16 @@ export default {
     },
     edit(record) {
       this.model = Object.assign({}, record)
+
+      var select={id:record.woId}
+      getAction('/itdmGongdanMaster/itdmGongdanMaster/queryById', select).then((res) => {
+        if (res.success) {
+          console.log("xxxxxxxxxxxxxxxxxxx")
+          console.log(res.result)
+          this.model.shijiShebeiId=res.result.shebeiId
+        }
+      })
+
       this.visible = true
     },
     submitForm() {

+ 4 - 4
itdmWeb/src/views/module-iTDM/itdmAlarmTotal/ItdmAlarmTotalList.vue

@@ -18,10 +18,10 @@
             <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>
-              <a @click="handleToggleSearch" style="margin-left: 8px">
-                {{ toggleSearchStatus ? '收起' : '展开' }}
-                <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
-              </a>
+<!--              <a @click="handleToggleSearch" style="margin-left: 8px">-->
+<!--                {{ toggleSearchStatus ? '收起' : '展开' }}-->
+<!--                <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>-->
+<!--              </a>-->
             </span>
           </a-col>
         </a-row>

+ 239 - 0
itdmWeb/src/views/module-iTDM/itdmFirstPage/ItdmTaskList.vue

@@ -0,0 +1,239 @@
+<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="内容">
+              <a-input placeholder="请输入内容" v-model="queryParam.taskContent"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="任务状态">
+              <j-dict-select-tag placeholder="请选择任务状态(0待办1进行2完成)" v-model="queryParam.taskStatus" dictCode="task_status"/>
+            </a-form-item>
+          </a-col>
+          <template v-if="toggleSearchStatus">
+            <a-col :xl="6" :lg="7" :md="8" :sm="24">
+              <a-form-item label="待办角色">
+                <a-input placeholder="请输入待办角色" v-model="queryParam.taskRole"></a-input>
+              </a-form-item>
+            </a-col>
+            <a-col :xl="6" :lg="7" :md="8" :sm="24">
+              <a-form-item label="待办人员">
+                <a-input placeholder="请输入待办人员" v-model="queryParam.taskUser"></a-input>
+              </a-form-item>
+            </a-col>
+            <a-col :xl="6" :lg="7" :md="8" :sm="24">
+              <a-form-item label="关联委托id">
+                <a-input placeholder="请输入关联委托id" v-model="queryParam.weituoId"></a-input>
+              </a-form-item>
+            </a-col>
+          </template>
+          <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>
+              <a @click="handleToggleSearch" style="margin-left: 8px">
+                {{ toggleSearchStatus ? '收起' : '展开' }}
+                <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
+              </a>
+            </span>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <!-- 查询区域-END -->
+
+    <!-- 操作按钮区域 -->
+    <div class="table-operator">
+      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
+      <a-button type="primary" icon="download" @click="handleExportXls('任务表')">导出</a-button>
+      <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
+        <a-button type="primary" icon="import">导入</a-button>
+      </a-upload>
+      <!-- 高级查询区域 -->
+      <j-super-query :fieldList="superFieldList" ref="superQueryModal" @handleSuperQuery="handleSuperQuery"></j-super-query>
+      <a-dropdown v-if="selectedRowKeys.length > 0">
+        <a-menu slot="overlay">
+          <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
+        </a-menu>
+        <a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
+      </a-dropdown>
+    </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>
+
+    <itdm-task-modal ref="modalForm" @ok="modalFormOk"></itdm-task-modal>
+  </a-card>
+</template>
+
+<script>
+
+  import '@/assets/less/TableExpand.less'
+  import { mixinDevice } from '@/utils/mixin'
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+  import ItdmTaskModal from './modules/ItdmTaskModal'
+  import {filterMultiDictText} from '@/components/dict/JDictSelectUtil'
+
+  export default {
+    name: 'ItdmTaskList',
+    mixins:[JeecgListMixin, mixinDevice],
+    components: {
+      ItdmTaskModal
+    },
+    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: 'taskContent'
+          },
+          {
+            title:'任务状态(0待办1进行2完成)',
+            align:"center",
+            dataIndex: 'taskStatus_dictText'
+          },
+          {
+            title:'待办角色',
+            align:"center",
+            dataIndex: 'taskRole'
+          },
+          {
+            title:'待办人员',
+            align:"center",
+            dataIndex: 'taskUser'
+          },
+          {
+            title:'关联委托id',
+            align:"center",
+            dataIndex: 'weituoId'
+          },
+          {
+            title:'创建时间',
+            align:"center",
+            dataIndex: 'createTime'
+          },
+          {
+            title: '操作',
+            dataIndex: 'action',
+            align:"center",
+            fixed:"right",
+            width:147,
+            scopedSlots: { customRender: 'action' }
+          }
+        ],
+        url: {
+          list: "/itdmFirstPage/itdmTask/list",
+          delete: "/itdmFirstPage/itdmTask/delete",
+          deleteBatch: "/itdmFirstPage/itdmTask/deleteBatch",
+          exportXlsUrl: "/itdmFirstPage/itdmTask/exportXls",
+          importExcelUrl: "itdmFirstPage/itdmTask/importExcel",
+
+        },
+        dictOptions:{},
+        superFieldList:[],
+      }
+    },
+    created() {
+    this.getSuperFieldList();
+    },
+    computed: {
+      importExcelUrl: function(){
+        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+      },
+    },
+    methods: {
+      initDictConfig(){
+      },
+      getSuperFieldList(){
+        let fieldList=[];
+        fieldList.push({type:'string',value:'taskContent',text:'内容',dictCode:''})
+        fieldList.push({type:'int',value:'taskStatus',text:'任务状态(0待办1进行2完成)',dictCode:'task_status'})
+        fieldList.push({type:'string',value:'taskRole',text:'待办角色',dictCode:''})
+        fieldList.push({type:'string',value:'taskUser',text:'待办人员',dictCode:''})
+        fieldList.push({type:'string',value:'weituoId',text:'关联委托id',dictCode:''})
+        fieldList.push({type:'datetime',value:'createTime',text:'创建时间'})
+        this.superFieldList = fieldList
+      }
+    }
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less';
+</style>

+ 124 - 0
itdmWeb/src/views/module-iTDM/itdmFirstPage/modules/ItdmTaskForm.vue

@@ -0,0 +1,124 @@
+<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="taskContent">
+              <a-input v-model="model.taskContent" placeholder="请输入内容"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="任务状态(0待办1进行2完成)" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="taskStatus">
+              <j-dict-select-tag type="list" v-model="model.taskStatus" dictCode="task_status" placeholder="请选择任务状态(0待办1进行2完成)" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="待办角色" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="taskRole">
+              <a-input v-model="model.taskRole" placeholder="请输入待办角色"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="待办人员" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="taskUser">
+              <a-input v-model="model.taskUser" placeholder="请输入待办人员"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="关联委托id" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="weituoId">
+              <a-input v-model="model.weituoId" placeholder="请输入关联委托id"  ></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: 'ItdmTaskForm',
+    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: {
+        },
+        url: {
+          add: "/itdmFirstPage/itdmTask/add",
+          edit: "/itdmFirstPage/itdmTask/edit",
+          queryById: "/itdmFirstPage/itdmTask/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>

+ 84 - 0
itdmWeb/src/views/module-iTDM/itdmFirstPage/modules/ItdmTaskModal.Style#Drawer.vue

@@ -0,0 +1,84 @@
+<template>
+  <a-drawer
+    :title="title"
+    :width="width"
+    placement="right"
+    :closable="false"
+    @close="close"
+    destroyOnClose
+    :visible="visible">
+    <itdm-task-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit" normal></itdm-task-form>
+    <div class="drawer-footer">
+      <a-button @click="handleCancel" style="margin-bottom: 0;">关闭</a-button>
+      <a-button v-if="!disableSubmit"  @click="handleOk" type="primary" style="margin-bottom: 0;">提交</a-button>
+    </div>
+  </a-drawer>
+</template>
+
+<script>
+
+  import ItdmTaskForm from './ItdmTaskForm'
+
+  export default {
+    name: 'ItdmTaskModal',
+    components: {
+      ItdmTaskForm
+    },
+    data () {
+      return {
+        title:"操作",
+        width:800,
+        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;
+      },
+      submitCallback(){
+        this.$emit('ok');
+        this.visible = false;
+      },
+      handleOk () {
+        this.$refs.realForm.submitForm();
+      },
+      handleCancel () {
+        this.close()
+      }
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+/** Button按钮间距 */
+  .ant-btn {
+    margin-left: 30px;
+    margin-bottom: 30px;
+    float: right;
+  }
+  .drawer-footer{
+    position: absolute;
+    bottom: -8px;
+    width: 100%;
+    border-top: 1px solid #e8e8e8;
+    padding: 10px 16px;
+    text-align: right;
+    left: 0;
+    background: #fff;
+    border-radius: 0 0 2px 2px;
+  }
+</style>

+ 60 - 0
itdmWeb/src/views/module-iTDM/itdmFirstPage/modules/ItdmTaskModal.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="关闭">
+    <itdm-task-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></itdm-task-form>
+  </j-modal>
+</template>
+
+<script>
+
+  import ItdmTaskForm from './ItdmTaskForm'
+  export default {
+    name: 'ItdmTaskModal',
+    components: {
+      ItdmTaskForm
+    },
+    data () {
+      return {
+        title:'',
+        width:800,
+        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>

+ 2 - 0
itdmWeb/src/views/module-iTDM/itdmGongdanDetail/ItdmGongdanDetailList.vue

@@ -9,6 +9,7 @@
               <a-select
                 v-model="queryParam.weituoClient"
                 label-in-value
+                show-search
                 :options="weituoClientOptions"
                 @change="getWeituoClientOptions"
               ></a-select>
@@ -19,6 +20,7 @@
               <a-select
                 v-model="queryParam.weituoId"
                 key-in-value
+                show-search
                 :options="weituoNoOptions"
               ></a-select>
             </a-form-item>

+ 22 - 10
itdmWeb/src/views/module-iTDM/weituo/ItdmWeituoInfoList.vue

@@ -6,22 +6,14 @@
         <a-row :gutter="24">
           <a-col :xl="6" :lg="7" :md="8" :sm="24">
             <a-form-item label="委托单位名称">
-              <a-input placeholder="请输入委托单位名称" v-model="queryParam.weituoClient"></a-input>
-            </a-form-item>
-          </a-col>
-          <a-col :xl="6" :lg="7" :md="8" :sm="24">
-            <a-form-item label="委托单位地址">
-              <a-input placeholder="请输入委托单位地址" v-model="queryParam.weituoAddress"></a-input>
+              <j-search-select-tag placeholder="请选择委托单位名称" v-model="queryParam.weituoClient"  :dictOptions="weituoClientList"/>
+<!--              <a-input placeholder="请输入委托单位名称" v-model="queryParam.weituoClient"></a-input>-->
             </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>
-              <a @click="handleToggleSearch" style="margin-left: 8px">
-                {{ toggleSearchStatus ? '收起' : '展开' }}
-                <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
-              </a>
             </span>
           </a-col>
         </a-row>
@@ -121,6 +113,7 @@ import { JeecgListMixin } from '@/mixins/JeecgListMixin'
 import ItdmWeituoInfoModal from './modules/ItdmWeituoInfoModal'
 import { ajaxGetDictItems, loadCategoryData } from '@/api/api'
 import { filterMultiDictText } from '@comp/dict/JDictSelectUtil'
+import { getAction } from '@api/manage'
 
 
 
@@ -132,6 +125,7 @@ export default {
   },
   data () {
     return {
+      weituoClientList:[],
       description: '委托信息管理页面',
       // 表头
       columns: [
@@ -216,6 +210,7 @@ export default {
   },
   created() {
     this.getSuperFieldList();
+    this.init()
   },
   computed: {
     importExcelUrl: function(){
@@ -223,6 +218,23 @@ export default {
     },
   },
   methods: {
+
+    init(){
+
+      getAction('/weituo/itdmWeituoInfo/distinctClientList', {}).then((res) => {
+        if (res.success) {
+          console.log(res.result)
+          this.weituoClientList = res.result.map(i=>{
+            return { value: i, text: i}
+          })
+          console.log(this.weituoClientList)
+        }
+      })
+
+
+    },
+
+
     initDictConfig(){
       ajaxGetDictItems('weituo.bgyz').then((res) => {
         if (res.success) {

+ 599 - 160
itdmWeb/src/views/user/Login.vue

@@ -1,214 +1,653 @@
 <template>
   <div class="main">
-    <a-form-model class="user-layout-login" @keyup.enter.native="handleSubmit">
-      <a-tabs :activeKey="customActiveKey" :tabBarStyle="{ textAlign: 'center', borderBottom: 'unset' }"  @change="handleTabClick">
+    <a-form :form="form" class="user-layout-login" ref="formLogin" id="formLogin">
+      <a-tabs
+        :activeKey="customActiveKey"
+        :tabBarStyle="{ textAlign: 'center', borderBottom: 'unset' }"
+        @change="handleTabClick">
         <a-tab-pane key="tab1" tab="账号密码登录">
-          <login-account ref="alogin" @validateFail="validateFail" @success="requestSuccess" @fail="requestFailed"></login-account>
+          <a-form-item>
+            <a-input
+              size="large"
+              v-decorator="['username',validatorRules.username,{ validator: this.handleUsernameOrEmail }]"
+              type="text"
+              placeholder="请输入帐户名">
+              <a-icon slot="prefix" type="user" :style="{ color: 'rgba(0,0,0,.25)' }"/>
+            </a-input>
+          </a-form-item>
+
+          <a-form-item>
+            <a-input
+              v-decorator="['password',validatorRules.password]"
+              size="large"
+              type="password"
+              autocomplete="false"
+              placeholder="密码">
+              <a-icon slot="prefix" type="lock" :style="{ color: 'rgba(0,0,0,.25)' }"/>
+            </a-input>
+          </a-form-item>
+
+          <!--          <a-row :gutter="0">-->
+          <!--            <a-col :span="16">-->
+          <!--              <a-form-item>-->
+          <!--                <a-input-->
+          <!--                  v-decorator="['inputCode',validatorRules.inputCode]"-->
+          <!--                  size="large"-->
+          <!--                  type="text"-->
+          <!--                  @change="inputCodeChange"-->
+          <!--                  placeholder="请输入验证码">-->
+          <!--                  <a-icon slot="prefix" type="smile" :style="{ color: 'rgba(0,0,0,.25)' }"/>-->
+          <!--                </a-input>-->
+          <!--              </a-form-item>-->
+          <!--            </a-col>-->
+          <!--            <a-col :span="8" style="text-align: right">-->
+          <!--              <img v-if="requestCodeSuccess" style="margin-top: 2px;" :src="randCodeImage" @click="handleChangeCheckCode"/>-->
+          <!--              <img v-else style="margin-top: 2px;" src="../../assets/checkcode.png" @click="handleChangeCheckCode"/>-->
+          <!--            </a-col>-->
+          <!--          </a-row>-->
+
+
         </a-tab-pane>
+        <!--        <a-tab-pane key="tab2" tab="手机号登陆">-->
+        <!--          <a-form-item>-->
+        <!--            <a-input-->
+        <!--              v-decorator="['mobile',validatorRules.mobile]"-->
+        <!--              size="large"-->
+        <!--              type="text"-->
+        <!--              placeholder="手机号">-->
+        <!--              <a-icon slot="prefix" type="mobile" :style="{ color: 'rgba(0,0,0,.25)' }"/>-->
+        <!--            </a-input>-->
+        <!--          </a-form-item>-->
 
-<!--        <a-tab-pane key="tab2" tab="手机号登录">-->
-<!--          <login-phone ref="plogin" @validateFail="validateFail" @success="requestSuccess" @fail="requestFailed"></login-phone>-->
-<!--        </a-tab-pane>-->
+        <!--          <a-row :gutter="16">-->
+        <!--            <a-col class="gutter-row" :span="16">-->
+        <!--              <a-form-item>-->
+        <!--                <a-input-->
+        <!--                  v-decorator="['captcha',validatorRules.captcha]"-->
+        <!--                  size="large"-->
+        <!--                  type="text"-->
+        <!--                  placeholder="请输入验证码">-->
+        <!--                  <a-icon slot="prefix" type="mail" :style="{ color: 'rgba(0,0,0,.25)' }"/>-->
+        <!--                </a-input>-->
+        <!--              </a-form-item>-->
+        <!--            </a-col>-->
+        <!--            <a-col class="gutter-row" :span="8">-->
+        <!--              <a-button-->
+        <!--                class="getCaptcha"-->
+        <!--                tabindex="-1"-->
+        <!--                :disabled="state.smsSendBtn"-->
+        <!--                @click.stop.prevent="getCaptcha"-->
+        <!--                v-text="!state.smsSendBtn && '获取验证码' || (state.time+' s')"></a-button>-->
+        <!--            </a-col>-->
+        <!--          </a-row>-->
+        <!--        </a-tab-pane>-->
       </a-tabs>
 
-      <a-form-model-item>
-        <a-checkbox @change="handleRememberMeChange" default-checked>自动登录</a-checkbox>
-<!--        <router-link :to="{ name: 'alteration'}" class="forge-password" style="float: right;">-->
-<!--          忘记密码-->
-<!--        </router-link>-->
-<!--        <router-link :to="{ name: 'register'}" class="forge-password" style="float: right;margin-right: 10px" >-->
-<!--          注册账户-->
-<!--        </router-link>-->
-      </a-form-model-item>
+      <a-form-item>
+        <!--        <a-checkbox v-decorator="['rememberMe', {initialValue: true, valuePropName: 'checked'}]" >自动登录</a-checkbox>-->
+        <!--        <router-link :to="{ name: 'alteration'}" class="forge-password" style="float: right;">-->
+        <!--          忘记密码-->
+        <!--        </router-link>-->
+        <!--       <router-link :to="{ name: 'register'}" class="forge-password" style="float: right;margin-right: 10px" >-->
+        <!--          注册账户-->
+        <!--        </router-link>-->
+      </a-form-item>
 
       <a-form-item style="margin-top:24px">
-        <a-button size="large"  type="primary"  htmlType="submit"  class="login-button"  :loading="loginBtn"  @click.stop.prevent="handleSubmit" :disabled="loginBtn">确定
+        <a-button
+          size="large"
+          type="primary"
+          htmlType="submit"
+          class="login-button"
+          :loading="loginBtn"
+          @click.stop.prevent="handleSubmit"
+          :disabled="loginBtn">确定
         </a-button>
       </a-form-item>
 
-    </a-form-model>
+      <!--      <div class="user-login-other">-->
+      <!--        <span>其他登陆方式</span>-->
+      <!--        <a @click="onThirdLogin('github')" title="github"><a-icon class="item-icon" type="github"></a-icon></a>-->
+      <!--        <a @click="onThirdLogin('wechat_enterprise')" title="企业微信"><a-icon class="item-icon" type="wechat"></a-icon></a>-->
+      <!--        <a @click="onThirdLogin('dingtalk')" title="钉钉"><a-icon class="item-icon" type="dingding"></a-icon></a>-->
+      <!--      </div>-->
+    </a-form>
 
-    <two-step-captcha v-if="requiredTwoStepCaptcha" :visible="stepCaptchaVisible" @success="stepCaptchaSuccess" @cancel="stepCaptchaCancel"></two-step-captcha>
+    <two-step-captcha
+      v-if="requiredTwoStepCaptcha"
+      :visible="stepCaptchaVisible"
+      @success="stepCaptchaSuccess"
+      @cancel="stepCaptchaCancel"></two-step-captcha>
     <login-select-tenant ref="loginSelect" @success="loginSelectOk"></login-select-tenant>
 <!--    <third-login ref="thirdLogin"></third-login>-->
   </div>
 </template>
 
 <script>
+//import md5 from "md5"
+import api from '@/api'
+import TwoStepCaptcha from '@/components/tools/TwoStepCaptcha'
+import { mapActions } from "vuex"
+import { timeFix } from "@/utils/util"
 import Vue from 'vue'
-import { ACCESS_TOKEN, ENCRYPTED_STRING } from '@/store/mutation-types'
+import { ACCESS_TOKEN ,ENCRYPTED_STRING} from "@/store/mutation-types"
+import { putAction,postAction,getAction } from '@/api/manage'
+import { encryption , getEncryptedString } from '@/utils/encryption/aesEncrypt'
+import store from '@/store/'
+import { USER_INFO } from "@/store/mutation-types"
 import ThirdLogin from './third/ThirdLogin'
-import LoginSelectTenant from './LoginSelectTenant'
-import TwoStepCaptcha from '@/components/tools/TwoStepCaptcha'
-import { getEncryptedString } from '@/utils/encryption/aesEncrypt'
-import { timeFix } from '@/utils/util'
-
-import LoginAccount from './LoginAccount'
-import LoginPhone from './LoginPhone'
-
+import LoginSelectTenant from "./LoginSelectTenant";
 export default {
-    components: {
-      LoginSelectTenant,
-      TwoStepCaptcha,
-      ThirdLogin,
-      LoginAccount,
-      LoginPhone
-    },
-    data () {
-      return {
-        customActiveKey: 'tab1',
-        rememberMe: true,
-        loginBtn: false,
-        requiredTwoStepCaptcha: false,
-        stepCaptchaVisible: false,
-        encryptedString:{
-          key:"",
-          iv:"",
-        },
+  components: {
+    LoginSelectTenant,
+    TwoStepCaptcha,
+    ThirdLogin
+  },
+  data () {
+    return {
+      customActiveKey: "tab1",
+      loginBtn: false,
+      // login type: 0 email, 1 username, 2 telephone
+      loginType: 0,
+      requiredTwoStepCaptcha: false,
+      stepCaptchaVisible: false,
+      form: this.$form.createForm(this),
+      encryptedString:{
+        key:"",
+        iv:"",
+      },
+      state: {
+        time: 60,
+        smsSendBtn: false,
+      },
+      validatorRules:{
+        username:{rules: [{ required: true, message: '请输入用户名!'},{validator: this.handleUsernameOrEmail}]},
+        password:{rules: [{ required: true, message: '请输入密码!',validator: 'click'}]},
+        mobile:{rules: [{validator:this.validateMobile}]},
+        captcha:{rule: [{ required: true, message: '请输入验证码!'}]},
+        inputCode:{rules: [{ required: true, message: '请输入验证码!'}]}
+      },
+      verifiedCode:"",
+      inputCodeContent:"",
+      inputCodeNull:true,
+      currentUsername:"",
+      currdatetime:'',
+      randCodeImage:'',
+      requestCodeSuccess:false,
+    }
+  },
+  created () {
+    this.currdatetime = new Date().getTime();
+    Vue.ls.remove(ACCESS_TOKEN)
+    this.getRouterData();
+    //this.handleChangeCheckCode(); //yzm
+    // update-begin- --- author:scott ------ date:20190805 ---- for:密码加密逻辑暂时注释掉,有点问题
+    //this.getEncrypte();
+    // update-end- --- author:scott ------ date:20190805 ---- for:密码加密逻辑暂时注释掉,有点问题
+  },
+  methods: {
+    ...mapActions(['Login', 'Logout', 'PhoneLogin']),
+    // handler
+    handleUsernameOrEmail (rule, value, callback) {
+      const regex = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$/;
+      if (regex.test(value)) {
+        this.loginType = 0
+      } else {
+        this.loginType = 1
       }
+      callback()
     },
-    created() {
-      Vue.ls.remove(ACCESS_TOKEN)
-      this.getRouterData();
-      this.rememberMe = true
+    handleTabClick (key) {
+      this.customActiveKey = key
+      // this.form.resetFields()
     },
-    methods:{
-      handleTabClick(key){
-        this.customActiveKey = key
-      },
-      handleRememberMeChange(e){
-        this.rememberMe = e.target.checked
-      },
-      /**跳转到登录页面的参数-账号获取*/
-      getRouterData(){
-        this.$nextTick(() => {
-          let temp = this.$route.params.username || this.$route.query.username || ''
-          if (temp) {
-            this.$refs.alogin.acceptUsername(temp)
+    handleSubmit () {
+      let that = this
+      let loginParams = {};
+      that.loginBtn = true;
+      // 使用账户密码登录
+      if (that.customActiveKey === 'tab1') {
+        that.form.validateFields([ 'username', 'password','inputCode', 'rememberMe' ], { force: true }, (err, values) => {
+          if (!err) {
+            loginParams.username = values.username
+            // update-begin- --- author:scott ------ date:20190805 ---- for:密码加密逻辑暂时注释掉,有点问题
+            //loginParams.password = md5(values.password)
+            //loginParams.password = encryption(values.password,that.encryptedString.key,that.encryptedString.iv)
+            loginParams.password = values.password
+            loginParams.remember_me = values.rememberMe
+            // update-begin- --- author:scott ------ date:20190805 ---- for:密码加密逻辑暂时注释掉,有点问题
+            loginParams.captcha = that.inputCodeContent
+            loginParams.checkKey = that.currdatetime
+            console.log("登录参数",loginParams)
+            that.Login(loginParams).then((res) => {
+              this.$refs.loginSelect.show(res.result)
+            }).catch((err) => {
+              that.requestFailed(err);
+            });
+
+
+          }else {
+            that.loginBtn = false;
           }
         })
-      },
+        // 使用手机号登录
+      } else {
+        that.form.validateFields([ 'mobile', 'captcha', 'rememberMe' ], { force: true }, (err, values) => {
+          if (!err) {
+            loginParams.mobile = values.mobile
+            loginParams.captcha = values.captcha
+            loginParams.remember_me = values.rememberMe
+            that.PhoneLogin(loginParams).then((res) => {
+              console.log(res.result);
+              this.$refs.loginSelect.show(res.result)
+            }).catch((err) => {
+              that.requestFailed(err);
+            })
 
-      //登录
-      handleSubmit () {
-        this.loginBtn = true;
-        if (this.customActiveKey === 'tab1') {
-          // 使用账户密码登录
-          this.$refs.alogin.handleLogin(this.rememberMe)
-        } else {
-          //手机号码登录
-          this.$refs.plogin.handleLogin(this.rememberMe)
-        }
-      },
-      // 校验失败
-      validateFail(){
-        this.loginBtn = false;
-      },
-      // 登录后台成功
-      requestSuccess(loginResult){
-        this.$refs.loginSelect.show(loginResult)
-      },
-      //登录后台失败
-      requestFailed (err) {
-        let description = ((err.response || {}).data || {}).message || err.message || "请求出现错误,请稍后再试"
-        this.$notification[ 'error' ]({
-          message: '登录失败',
-          description: description,
-          duration: 4,
-        });
-        //账户密码登录错误后更新验证码
-        if(this.customActiveKey === 'tab1' && description.indexOf('密码错误')>0){
-          this.$refs.alogin.handleChangeCheckCode()
-        }
-        this.loginBtn = false;
-      },
-      loginSelectOk(){
-        this.loginSuccess()
-      },
-      //登录成功
-      loginSuccess () {
-        this.$router.push({ path: "/dashboard/analysis" }).catch(()=>{
-          console.log('登录跳转首页出错,这个错误从哪里来的')
+          }
         })
-        this.$notification.success({
-          message: '欢迎',
-          description: `${timeFix()},欢迎回来`,
-        });
-      },
+      }
+    },
+    getCaptcha (e) {
+      e.preventDefault();
+      let that = this;
+      this.form.validateFields([ 'mobile' ], { force: true },(err,values) => {
+          if(!values.mobile){
+            that.cmsFailed("请输入手机号");
+          }else if (!err) {
+            this.state.smsSendBtn = true;
+            let interval = window.setInterval(() => {
+              if (that.state.time-- <= 0) {
+                that.state.time = 60;
+                that.state.smsSendBtn = false;
+                window.clearInterval(interval);
+              }
+            }, 1000);
 
-      stepCaptchaSuccess () {
-        this.loginSuccess()
-      },
-      stepCaptchaCancel () {
-        this.Logout().then(() => {
-          this.loginBtn = false
-          this.stepCaptchaVisible = false
-        })
-      },
-      //获取密码加密规则
-      getEncrypte(){
-        var encryptedString = Vue.ls.get(ENCRYPTED_STRING);
-        if(encryptedString == null){
-          getEncryptedString().then((data) => {
-            this.encryptedString = data
-          });
+            const hide = this.$message.loading('验证码发送中..', 0);
+            let smsParams = {};
+            smsParams.mobile=values.mobile;
+            smsParams.smsmode="0";
+            postAction("/sys/sms",smsParams)
+              .then(res => {
+                if(!res.success){
+                  setTimeout(hide, 0);
+                  this.cmsFailed(res.message);
+                }
+                console.log(res);
+                setTimeout(hide, 500);
+              })
+              .catch(err => {
+                setTimeout(hide, 1);
+                clearInterval(interval);
+                that.state.time = 60;
+                that.state.smsSendBtn = false;
+                this.requestFailed(err);
+              });
+          }
+        }
+      );
+    },
+    stepCaptchaSuccess () {
+      this.loginSuccess()
+    },
+    stepCaptchaCancel () {
+      this.Logout().then(() => {
+        this.loginBtn = false
+        this.stepCaptchaVisible = false
+      })
+    },
+    handleChangeCheckCode(){
+      this.currdatetime = new Date().getTime();
+      getAction(`/sys/randomImage/${this.currdatetime}`).then(res=>{
+        if(res.success){
+          this.randCodeImage = res.result
+          this.requestCodeSuccess=true
         }else{
-          this.encryptedString = encryptedString;
+          this.$message.error(res.message)
+          this.requestCodeSuccess=false
         }
+      }).catch(()=>{
+        this.requestCodeSuccess=false
+      })
+    },
+    loginSuccess () {
+      this.$router.push({ path: "/dashboard/analysis" }).catch(()=>{
+        console.log('登录跳转首页出错,这个错误从哪里来的')
+      })
+      this.$notification.success({
+        message: '欢迎',
+        description: `${timeFix()},欢迎回来`,
+      });
+    },
+    cmsFailed(err){
+      this.$notification[ 'error' ]({
+        message: "登录失败",
+        description:err,
+        duration: 4,
+      });
+    },
+    requestFailed (err) {
+      this.$notification[ 'error' ]({
+        message: '登录失败',
+        description: ((err.response || {}).data || {}).message || err.message || "请求出现错误,请稍后再试",
+        duration: 4,
+      });
+      this.loginBtn = false;
+    },
+    validateMobile(rule,value,callback){
+      if (!value || new RegExp(/^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\d{8}$/).test(value)){
+        callback();
+      }else{
+        callback("您的手机号码格式不正确!");
       }
 
-    }
-
+    },
+    validateInputCode(rule,value,callback){
+      if(!value || this.verifiedCode==this.inputCodeContent){
+        callback();
+      }else{
+        callback("您输入的验证码不正确!");
+      }
+    },
+    generateCode(value){
+      this.verifiedCode = value.toLowerCase()
+    },
+    inputCodeChange(e){
+      this.inputCodeContent = e.target.value
+    },
+    loginSelectOk(){
+      this.loginSuccess()
+    },
+    getRouterData(){
+      this.$nextTick(() => {
+        if (this.$route.params.username) {
+          this.form.setFieldsValue({
+            'username': this.$route.params.username
+          });
+        }
+      })
+    },
+    //获取密码加密规则
+    getEncrypte(){
+      var encryptedString = Vue.ls.get(ENCRYPTED_STRING);
+      if(encryptedString == null){
+        getEncryptedString().then((data) => {
+          this.encryptedString = data
+        });
+      }else{
+        this.encryptedString = encryptedString;
+      }
+    },
   }
+}
 </script>
+
 <style lang="less" scoped>
-  .user-layout-login {
-    label {
-      font-size: 14px;
-    }
+
+.user-layout-login {
+  label {
+    font-size: 14px;
+  }
+
   .getCaptcha {
-      display: block;
-      width: 100%;
-      height: 40px;
-    }
+    display: block;
+    width: 100%;
+    height: 40px;
+  }
 
   .forge-password {
-      font-size: 14px;
-    }
+    font-size: 14px;
+  }
 
-    button.login-button {
-      padding: 0 15px;
-      font-size: 16px;
-      height: 40px;
-      width: 100%;
-    }
+  button.login-button {
+    padding: 0 15px;
+    font-size: 16px;
+    height: 40px;
+    width: 100%;
+  }
 
   .user-login-other {
-      text-align: left;
-      margin-top: 24px;
-      line-height: 22px;
+    text-align: left;
+    margin-top: 24px;
+    line-height: 22px;
 
     .item-icon {
-        font-size: 24px;
-        color: rgba(0,0,0,.2);
-        margin-left: 16px;
-        vertical-align: middle;
-        cursor: pointer;
-        transition: color .3s;
+      font-size: 24px;
+      color: rgba(0,0,0,.2);
+      margin-left: 16px;
+      vertical-align: middle;
+      cursor: pointer;
+      transition: color .3s;
 
       &:hover {
-          color: #1890ff;
-        }
+        color: #1890ff;
       }
+    }
 
     .register {
-        float: right;
-      }
+      float: right;
     }
   }
+}
+
 </style>
 <style>
-  .valid-error .ant-select-selection__placeholder{
-    color: #f5222d;
-  }
-</style>
+.valid-error .ant-select-selection__placeholder{
+  color: #f5222d;
+}
+</style>
+<!--<template>-->
+<!--  <div class="main">-->
+<!--    <a-form-model class="user-layout-login" @keyup.enter.native="handleSubmit">-->
+<!--      <a-tabs :activeKey="customActiveKey" :tabBarStyle="{ textAlign: 'center', borderBottom: 'unset' }"  @change="handleTabClick">-->
+<!--        <a-tab-pane key="tab1" tab="账号密码登录">-->
+<!--          <login-account ref="alogin" @validateFail="validateFail" @success="requestSuccess" @fail="requestFailed"></login-account>-->
+<!--        </a-tab-pane>-->
+
+<!--&lt;!&ndash;        <a-tab-pane key="tab2" tab="手机号登录">&ndash;&gt;-->
+<!--&lt;!&ndash;          <login-phone ref="plogin" @validateFail="validateFail" @success="requestSuccess" @fail="requestFailed"></login-phone>&ndash;&gt;-->
+<!--&lt;!&ndash;        </a-tab-pane>&ndash;&gt;-->
+<!--      </a-tabs>-->
+
+<!--      <a-form-model-item>-->
+<!--        <a-checkbox @change="handleRememberMeChange" default-checked>自动登录</a-checkbox>-->
+<!--&lt;!&ndash;        <router-link :to="{ name: 'alteration'}" class="forge-password" style="float: right;">&ndash;&gt;-->
+<!--&lt;!&ndash;          忘记密码&ndash;&gt;-->
+<!--&lt;!&ndash;        </router-link>&ndash;&gt;-->
+<!--&lt;!&ndash;        <router-link :to="{ name: 'register'}" class="forge-password" style="float: right;margin-right: 10px" >&ndash;&gt;-->
+<!--&lt;!&ndash;          注册账户&ndash;&gt;-->
+<!--&lt;!&ndash;        </router-link>&ndash;&gt;-->
+<!--      </a-form-model-item>-->
+
+<!--      <a-form-item style="margin-top:24px">-->
+<!--        <a-button size="large"  type="primary"  htmlType="submit"  class="login-button"  :loading="loginBtn"  @click.stop.prevent="handleSubmit" :disabled="loginBtn">确定-->
+<!--        </a-button>-->
+<!--      </a-form-item>-->
+
+<!--    </a-form-model>-->
+
+<!--    <two-step-captcha v-if="requiredTwoStepCaptcha" :visible="stepCaptchaVisible" @success="stepCaptchaSuccess" @cancel="stepCaptchaCancel"></two-step-captcha>-->
+<!--    <login-select-tenant ref="loginSelect" @success="loginSelectOk"></login-select-tenant>-->
+<!--&lt;!&ndash;    <third-login ref="thirdLogin"></third-login>&ndash;&gt;-->
+<!--  </div>-->
+<!--</template>-->
+
+<!--<script>-->
+<!--import Vue from 'vue'-->
+<!--import { ACCESS_TOKEN, ENCRYPTED_STRING } from '@/store/mutation-types'-->
+<!--import ThirdLogin from './third/ThirdLogin'-->
+<!--import LoginSelectTenant from './LoginSelectTenant'-->
+<!--import TwoStepCaptcha from '@/components/tools/TwoStepCaptcha'-->
+<!--import { getEncryptedString } from '@/utils/encryption/aesEncrypt'-->
+<!--import { timeFix } from '@/utils/util'-->
+
+<!--import LoginAccount from './LoginAccount'-->
+<!--import LoginPhone from './LoginPhone'-->
+
+<!--export default {-->
+<!--    components: {-->
+<!--      LoginSelectTenant,-->
+<!--      TwoStepCaptcha,-->
+<!--      ThirdLogin,-->
+<!--      LoginAccount,-->
+<!--      LoginPhone-->
+<!--    },-->
+<!--    data () {-->
+<!--      return {-->
+<!--        customActiveKey: 'tab1',-->
+<!--        rememberMe: true,-->
+<!--        loginBtn: false,-->
+<!--        requiredTwoStepCaptcha: false,-->
+<!--        stepCaptchaVisible: false,-->
+<!--        encryptedString:{-->
+<!--          key:"",-->
+<!--          iv:"",-->
+<!--        },-->
+<!--      }-->
+<!--    },-->
+<!--    created() {-->
+<!--      Vue.ls.remove(ACCESS_TOKEN)-->
+<!--      this.getRouterData();-->
+<!--      this.rememberMe = true-->
+<!--    },-->
+<!--    methods:{-->
+<!--      handleTabClick(key){-->
+<!--        this.customActiveKey = key-->
+<!--      },-->
+<!--      handleRememberMeChange(e){-->
+<!--        this.rememberMe = e.target.checked-->
+<!--      },-->
+<!--      /**跳转到登录页面的参数-账号获取*/-->
+<!--      getRouterData(){-->
+<!--        this.$nextTick(() => {-->
+<!--          let temp = this.$route.params.username || this.$route.query.username || ''-->
+<!--          if (temp) {-->
+<!--            this.$refs.alogin.acceptUsername(temp)-->
+<!--          }-->
+<!--        })-->
+<!--      },-->
+
+<!--      //登录-->
+<!--      handleSubmit () {-->
+<!--        this.loginBtn = true;-->
+<!--        if (this.customActiveKey === 'tab1') {-->
+<!--          // 使用账户密码登录-->
+<!--          this.$refs.alogin.handleLogin(this.rememberMe)-->
+<!--        } else {-->
+<!--          //手机号码登录-->
+<!--          this.$refs.plogin.handleLogin(this.rememberMe)-->
+<!--        }-->
+<!--      },-->
+<!--      // 校验失败-->
+<!--      validateFail(){-->
+<!--        this.loginBtn = false;-->
+<!--      },-->
+<!--      // 登录后台成功-->
+<!--      requestSuccess(loginResult){-->
+<!--        this.$refs.loginSelect.show(loginResult)-->
+<!--      },-->
+<!--      //登录后台失败-->
+<!--      requestFailed (err) {-->
+<!--        let description = ((err.response || {}).data || {}).message || err.message || "请求出现错误,请稍后再试"-->
+<!--        this.$notification[ 'error' ]({-->
+<!--          message: '登录失败',-->
+<!--          description: description,-->
+<!--          duration: 4,-->
+<!--        });-->
+<!--        //账户密码登录错误后更新验证码-->
+<!--        if(this.customActiveKey === 'tab1' && description.indexOf('密码错误')>0){-->
+<!--          this.$refs.alogin.handleChangeCheckCode()-->
+<!--        }-->
+<!--        this.loginBtn = false;-->
+<!--      },-->
+<!--      loginSelectOk(){-->
+<!--        this.loginSuccess()-->
+<!--      },-->
+<!--      //登录成功-->
+<!--      loginSuccess () {-->
+<!--        this.$router.push({ path: "/dashboard/analysis" }).catch(()=>{-->
+<!--          console.log('登录跳转首页出错,这个错误从哪里来的')-->
+<!--        })-->
+<!--        this.$notification.success({-->
+<!--          message: '欢迎',-->
+<!--          description: `${timeFix()},欢迎回来`,-->
+<!--        });-->
+<!--      },-->
+
+<!--      stepCaptchaSuccess () {-->
+<!--        this.loginSuccess()-->
+<!--      },-->
+<!--      stepCaptchaCancel () {-->
+<!--        this.Logout().then(() => {-->
+<!--          this.loginBtn = false-->
+<!--          this.stepCaptchaVisible = false-->
+<!--        })-->
+<!--      },-->
+<!--      //获取密码加密规则-->
+<!--      getEncrypte(){-->
+<!--        var encryptedString = Vue.ls.get(ENCRYPTED_STRING);-->
+<!--        if(encryptedString == null){-->
+<!--          getEncryptedString().then((data) => {-->
+<!--            this.encryptedString = data-->
+<!--          });-->
+<!--        }else{-->
+<!--          this.encryptedString = encryptedString;-->
+<!--        }-->
+<!--      }-->
+
+<!--    }-->
+
+<!--  }-->
+<!--</script>-->
+<!--<style lang="less" scoped>-->
+<!--  .user-layout-login {-->
+<!--    label {-->
+<!--      font-size: 14px;-->
+<!--    }-->
+<!--  .getCaptcha {-->
+<!--      display: block;-->
+<!--      width: 100%;-->
+<!--      height: 40px;-->
+<!--    }-->
+
+<!--  .forge-password {-->
+<!--      font-size: 14px;-->
+<!--    }-->
+
+<!--    button.login-button {-->
+<!--      padding: 0 15px;-->
+<!--      font-size: 16px;-->
+<!--      height: 40px;-->
+<!--      width: 100%;-->
+<!--    }-->
+
+<!--  .user-login-other {-->
+<!--      text-align: left;-->
+<!--      margin-top: 24px;-->
+<!--      line-height: 22px;-->
+
+<!--    .item-icon {-->
+<!--        font-size: 24px;-->
+<!--        color: rgba(0,0,0,.2);-->
+<!--        margin-left: 16px;-->
+<!--        vertical-align: middle;-->
+<!--        cursor: pointer;-->
+<!--        transition: color .3s;-->
+
+<!--      &:hover {-->
+<!--          color: #1890ff;-->
+<!--        }-->
+<!--      }-->
+
+<!--    .register {-->
+<!--        float: right;-->
+<!--      }-->
+<!--    }-->
+<!--  }-->
+<!--</style>-->
+<!--<style>-->
+<!--  .valid-error .ant-select-selection__placeholder{-->
+<!--    color: #f5222d;-->
+<!--  }-->
+<!--</style>-->