最近接到一個工作任務,是把釘釘小程序轉微信小程序...
對,居然還有這種操作,之前只聽過微信小程序轉支付寶小程序的,釘釘轉微信是什么鬼😿
實際操作之后發現,並不是太復雜。nodeJS加vscode全局替換,很快就能改完。
之所以沒有全部寫成程序來執行,一是因為我對兩邊的api不是太熟,這個項目也是新接手的,業務邏輯完全不熟,寫程序耗費時間太久且不好排查錯誤;二是通過逐個api的報錯修改,可以整理兩個小程序差異點,同時盡快熟悉業務代碼。
修復原有釘釘小程序的bug,加上轉為微信小程序一共花費4個工作日的時間,原來預期是10個工作日,所以這個效率是可以接受的。
1. 修改文件后綴名
釘釘小程序和支付寶小程序幾乎沒有差別,最主要的是支付寶小程序全局變量 my
, 釘釘小程序對應為 dd
。而釘釘小程序的文檔不如支付寶小程序詳細,所以看文檔直接看支付寶小程序的就可以了。
現在開始把釘釘轉微信啦!
首先第一步是把文件后綴名改了,axml改為wxml,wxss改為acss;
這一步可以用JS腳本執行。
代碼地址
2. 修改文件內部引用文件的后綴名
依然是axml改為wxml,wxss改為acss,采取全局替換即可。
3. 修改文件中import路徑
釘釘可以引用絕對路徑,但是微信在wxml和js中只能引用相對路徑,層級需要手動修改下。
4. API修改
釘釘/支付寶小程序與微信小程序的區別
釘釘小程序和支付寶小程序基本上沒有區別,把 dd
改為my
即可。以下我整理了一下釘釘小程序和微信小程序的區別,其實不是太大,遇到問題查一下文檔就能解決。
相比之下,釘釘小程序的編輯器非常難用,很容易預覽白屏,需要重啟編輯器,這一點真的很難接受。
api描述 | 釘釘小程序 | 微信小程序 |
---|---|---|
點擊事件綁定 | onTap |
bindtap |
失去焦點 | onBlur |
bindblur |
本地緩存 | dd.getStorageSync({key: 'score'}).data |
wx.getStorageSync('score') |
toast提示 | dd.showToast({content: '請填寫名稱'}) |
wx.showToast({title: '請填寫名稱',icon:'none'}) ,如果不設置icon:none ,會默認顯示成功的圖標 |
時間選擇器 | dd.datePicker |
微信里沒有此方法,可以通過picker-view組件實現 |
模板語法 | a: |
wx: |
網絡請求header參數 | dd.request 中為headers |
wx.request 中為header |
事件對象 | e.target.dataset.recordId |
微信會轉成小寫字母e.target.dataset.recordid |
子組件需要調用父組件的某個方法 | 父組件可以將函數作為屬性傳遞給子組件,子組件通過props接收 | 目前只能通過父組件事件監聽,子組件通過triggerEvent 觸發父組件自身的方法 |
圖片/文件上傳 | dd.chooseImage 成功回調中,圖片的本地臨時文件路徑列表屬性名為filePaths |
wx.chooseImage 成功回調中,圖片的本地臨時文件路徑列表屬性名為tempFilePaths |
上傳文件uploadFile | dd.uploadFile 參數對象中,name 屬性非必傳 |
wx.uploadFile 參數對象中,name 屬性必傳,作為文件對應的 key,開發者在服務端可以通過這個 key 獲取文件的二進制內容 |
登錄 | 調用my.getAuthCode 獲取授權碼 |
wx.login 調用接口獲取登錄憑證(code)。通過憑證進而換取用戶登錄態信息,包括用戶的唯一標識(openid)及本次登錄的會話密鑰(session_key)等。 |
滾動選擇器組件 picker-view | 初始加載時能通過value值設置默認選中位置 | 初始加載時不能通過value值設置默認選中位置,感覺是微信的bug |
自定義組件 | Component 定義屬性用props |
Component 定義屬性用properties |