<Page :total="addtotal" size="small" :current.sync='pageSizeOpts.curr'></Page>css
vue中,使用axios進行請求,使用了proxyTable來進行代理解決跨域問題,可是請求接口的協議爲https,本地是localhost,基礎的配置是黃色部分,通常請求爲http的能夠知足,出現https的就須要把紅色部分加上html
proxyTable: { vue
'/api/**': { // use proxywebpack
target: 'https://visualization.sec.wanmei.com',ios
changeOrigin: true,git
secure:false,github
pathRewrite: {'^/api': '' },web
header:{npm
Referer:'https://visualization.sec.wanmei.com' 請求的真實地址element-ui
}
}
}
那麼咱們在對axios進行全局配置中須要特別配置,以下
咱們須要進行配置紅色部分要加上,而後在咱們的具體請求的接口部分須要使用qs來進行編譯,而後加上header這部分
這是一維對象或者數組的狀況
當要傳的參數是這種形式 {aaa:{ccc:111}},須要首先將{ccc:111}進行格式化(JSON.stringify({ccc:111}));
最後傳的時候應該是 {「aaa」: JSON.stringify({ccc:111})};
這樣,就將總體都轉成了JSON格式的字符串,在axios請求中,依然是須要進行QS.stringify的;
須要注意的是:進行數據賦值的時候,要注意賦值的是基本數據類型仍是引用數據類型,若是是引用數據類型,當不一樣的屬性對應同一個引用數據類型的值的時候,那指向的地址是同樣的,在操做的時候就會出現混亂的狀況,爲了不這種狀況,可使用深克隆或者是循環賦值的解決方式,避免指向一個地址就ok
須要使dist文件能夠自適應各個服務器,沒必要根據不一樣的服務器,手動修改接口的公共部分url
在 1)文件中, ,將apiBase寫成‘「」’,雙引不能夠省略,修改以後打包,能夠適應各類服務器
須要注意的是:在本地開發的時候,使用了反向代理的狀況下,這裏的apiBase不可爲空,apiBase:’」/api」’,這樣是爲了反向代理找到一個目標url
用x-chart,vue-echart和vue-grid的是,安裝的依賴包,不能夠是版本號,須要引入兩個地址,不然會有不少功能不能使用,而且echarts的length的scroll功能,須要引入具體的length中的scroll的js纔可使用,不然報錯
"vue-echarts": "https://github.com/yugasun/vue-echarts#pro/compass",
"vue-grid-layout": "https://github.com/yugasun/vue-grid-layout#pro/compass",
拖拽表格的時候,提示column一直在更新,因爲column是動態生成的,並且是將column在拖拽過程當中進行數據的變更,因此一直提示,
處理方式,將column的處理,放在當前的組件中,這就不會致使報錯了
答:在表格的column的配置中 , 這裏的要將\n換成<br>,在render渲染函數中,使用domprops的屬性
緣由是將table寫在了每一個的tabContent中,對於只變動數據的狀況下,能夠將table放在整個Tab組件的外面,這樣table的渲染速度大大提高
對於內容不同的頁面,根據狀況進行處理
須要引入font文件,font文件中包含這幾個文件,而且保持font文件夾和iview.css文件保持同級;
引入以後發現顯示的按鈕不顯示,或者不對應,緣由是引入的那幾個ionicons較老,沒有與iview新版的同步,換一組版本較新的文件就行了
爲何會出現這樣的狀況???
緣由是iview的select中使用了 filterable
https://blog.csdn.net/suchaiyishengtui/article/details/82427688
這裏在點擊了後面的被聯動的幾個下拉以後,這個filter中實際上是有值的,無論這個值是什麼,結果是對我現有的列表進行了過濾,而且再也不顯示
解決的方法:在每次進行切換或者是別的操做的時候,在列表發生變化從新賦值的位置,對這個filter進行清空
this.$refs.datasourceref.$data.query="";
這樣就能夠在保證能夠過濾的狀況下,進行任意切換了;
在使用vue和iview的時候,使用了iview中的table組件,而後對table組件的最後一列進行自定義渲染,當渲染a標籤的時候,須要 給a標籤上加上href的屬性,應該怎麼加
https://cn.vuejs.org/v2/guide/render-function.html
render: (h, params) => {
return h('div', [
h('a', {
props: { //這裏是加一些不是標籤上的自身屬性 -- 組件 props
type: 'primary',
size: 'small'
},
attrs:{ //這裏加自身屬性,普通的 HTML 特性
Href:www.baidu.com
},
// DOM 屬性
domProps: {
innerHTML: 'baz'
},
style: {
marginRight: '5px'
},
on: {
click: () => {
this.show(params.index)
}
}
}, 'View')
]);
}
{
title:"順序號",
key:"ordernum",
sortable: true,
render: (h, params,index) => {
return h("InputNumber", {
props: {
value: params.row.ordernum,
min: 0
},
on: {
input: val => { //監聽value的變化
this.pageorder.discover_id = params.row.id;
this.pageorder.ordernum = val;
},
'on-blur':()=>{ //監聽失去焦點事件,這裏注意要使用’on-blur’事件
this.changeOrderNumberFn();
}
}
})
}
}
緣由是:使用傳統的CDN引入iview,icon的使用,必須在icon的外層加一個別的標籤將icon包着,行內元素或者塊元素均可以,只有有就能夠
https://blog.csdn.net/weixin_42869548/article/details/81382853
this.$refs[formName].resetFields() 使用此方法能夠去除上一次的保留(寫在表單框關閉狀態的後面,不能夠寫在表單框出現的時候,容易引發沒必要要的麻煩),可是出現了一個問題是,因爲根據類型不一樣,打開的表單框中展現的可驗證的內容不一樣,這時候會報錯,indexOf undefined,因此要對form中的rules進行從新的賦值,不一樣的驗證使用不一樣的驗證規則,不然報錯
不存在的狀況下,說明是變了一下,可是與上次保持一致,這時候不須要進行任何操做,不進行判斷就可能會出現錯誤,好比往數組中添加對象,對象是根據選中的值來肯定的,有可能添加進空對象,致使報錯
使用別名來
import {TableColumn,Table as NTable,ColorPicker} from 'element-ui';
Vue.use(NTable).use(ColorPicker);
使用了別名的狀況下,element-ui不能使用Vue.component(TableColumn.name, TableColumn);這種方式來引入
import { Table,Card} from 'iview'
Vue.component('Table', Table);
必定要安裝qs,沒有安裝,先進行安裝 npm install qs
將axios的
公共設置中的headers設置爲參數,賦上默認值 {'Content-Type':'application/json;charset=UTF-8'}
export const request = async ({
url = '',
method = 'GET',
data = {},
params = {},
headers={'Content-Type':'application/json;charset=UTF-8'},
timeout = 3000,
withCredentials = true
}, { autoToastError = true } = {}) => {
let res;
console.log(headers)
try {
res = await axios({
url: `${process.env.apiBase}${url}`,
// url: "https://pushmanager.sec.wanmei.net"+url, //直接請求,關閉反向代理那段代碼
method,
data,
params,
timeout,
headers,
headers,
//跨域請求是否須要憑證,默認false
withCredentials
})
} catch (err) {
res = buildErrorResponse(err)
}
在請求接口的js中
import qs from 'qs'
export const requestAddAdmin= async (data={},headers={}) => {
return await request({
url: '/manage/add',
method: 'post',
data: qs.stringify(data), 這個必需要進行格式轉化,不然出現400的問題
headers:{'Content-Type':'application/x-www-form-urlencoded'} ,對headers進行一個賦值
})
};
正如上一個問題,當進行表單提交的時候,須要對data進行轉義data=qs.stringify(data);
可是在包含文件上傳的時候,不能夠進行轉義,由於包含了file文件的內容,轉義就會致使請求失敗,header中無數據
示例:
<Modal v-model="modaladdflag" :title="modelType=='add'?'添加服務號':'修改服務號'" draggable width="600" @on-ok="handleSubmit('formValidate')">
<Form ref="formValidate" :model="formValidate" :rules="ruleValidate" :label-width="80">
<FormItem label="用戶名" prop="name">
<Input type="text" v-model="formValidate.name" placeholder="用戶名"/>
</FormItem>
<FormItem label="文件" prop="name">
<Button icon="ios-cloud-upload-outline" @click="trimUploadFn">上傳圖片</Button>
<input id="uploadImg" type="file" name="file" ref="upload" @change="getFile($event)" style="display:none;">
<span v-text="file"></span>
</FormItem>
<FormItem label="描述" prop="description">
<Input v-model="formValidate.description" type="textarea" placeholder="描述" :autosize="{minRows: 2,maxRows: 8}" />
</FormItem>
</Form>
</Modal>
getFile(event){
this.formValidate.file = event.target.files[0]; 關鍵語句
this.file = event.target.files[0].name;
},
handleSubmit (name) {
let event = window.event;
event.preventDefault();
this.$refs[name].validate((valid) => {
if (valid) {
this.PostFn(name);
} else {
this.$Message.error('請填寫必須部分');
};
});
},
PostFn:async function(name){
var info;
let formData = new FormData(this.$refs[name]); 關鍵語句
formData.append('name', this.formValidate.name);
formData.append('description', this.formValidate.description);
formData.append('id', this.formValidate.id);
formData.append('file', this.formValidate.file);
if(this.modelType=="add"){
info = await requestaddSubscription(formData);
}else{
info = await requestupdateSubscription(formData);
};
if(info.code == 0){
this.modaladdflag = false;
};
},
緣由是new FormData(),括號中不能寫dom獲取,寫了就報錯
是說iview下的某個js下出問題
解決:首先是安裝
1.安裝 npm install babel-polyfill
2.在main.js中引入.
引入方式一 require("babel-polyfill");
引入方式二 import "babel-polyfill";
引入以後依然不能使用,報的是無效字符的錯誤,且是和iview相關的問題;
解決問題,由於iview是按需引入的,須要將紅圈注掉就能夠正常展現頁面了(表示不能夠按需引入)
根據後臺返回的二進制流下載excel文件
在axios中要進行傳參
http://www.javashuo.com/article/p-zqwesirx-cn.html
let info = await sendExcel(obj);
const blob = new Blob([info.data], {
type: 'application/octet-stream'
});
let fileName = '導出信息.xls';
if ('download' in document.createElement('a')) { // 非IE下載
const elink = document.createElement('a')
elink.download = fileName
elink.style.display = 'none'
elink.href = URL.createObjectURL(blob)
document.body.appendChild(elink)
elink.click()
URL.revokeObjectURL(elink.href) // 釋放URL 對象
document.body.removeChild(elink)
} else { // IE10+下載
navigator.msSaveBlob(blob, fileName)
};
<input id="uploadImg" type="file" name="file" ref="upload" @change="getFile($event)" style="display:none;">
getFile(event){
let this_ = this;
this_.formItem.blinecontent="";
this_.spinShowModal = true;
var selectedFile = event.target.files[0];
this.formItem.file = selectedFile.name;
const reader = new FileReader();
reader.readAsText(selectedFile)
reader.onload = function () {
//當讀取完成後回調這個函數,而後此時文件的內容存儲到了result中,直接操做便可
this_.formItem.blinecontent=this.result;
this_.spinShowModal = false;
};
},
將favoico.ico的文件置於與index.html同級位置
傳統方式:在index.html文件中引入
<link href="/favicon.ico" rel="icon" type="image/x-icon" />
Vue的形式
在webpack.prod.conf.js中
在對應的文件目錄下放該ico