123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273 |
- import {
- validator,
- mpPlatform
- } from '@/js_sdk/validator/opendb-app-list.js';
- const formatFilePickerValue = (url) => (url ? {
- "name": "",
- "extname": "",
- "url": url,
- } : {})
- function getValidator(fields) {
- let result = {}
- for (let key in validator) {
- if (fields.includes(key)) {
- result[key] = validator[key]
- }
- }
- return result
- }
- const schemes = ["mimarket", "samsungapps", "appmarket", "oppomarket", "vivomarket"]
- const schemeBrand = ["xiaomi", "samsung", "huawei", "oppo", "vivo"]
- export default {
- data() {
- let formData = {
- "appid": "",
- "name": "",
- "icon_url": "",
- "introduction": "",
- "alias": "",
- "description": "",
- "screenshot": [],
- "store_list": [],
- "app_android": {},
- "app_ios": {},
- "mp_weixin": {},
- "mp_alipay": {},
- "mp_baidu": {},
- "mp_toutiao": {},
- "mp_qq": {},
- "mp_lark": {},
- "mp_kuaishou": {},
- "mp_dingtalk": {},
- "mp_jd": {},
- "h5": {},
- "quickapp": {}
- }
- const data = {
- formData,
- rules: Object.freeze(getValidator(Object.keys(formData))),
- mpPlatform: Object.freeze(mpPlatform),
- screenshotList: [],
- middleware_img: {},
- middleware_checkbox: {},
- appPackageInfo: {},
- appPlatformKeys: Object.freeze(['app_ios', 'app_android']),
- appPlatformValues: Object.freeze({
- app_android: 'Android',
- app_ios: 'iOS'
- }),
- keepItems: Object.freeze([]),
- isEdit: false,
- deletedStore: []
- }
- const mpKeys = Object.keys(mpPlatform);
- data.mpPlatformKeys = Object.freeze(mpKeys);
- [].concat(mpKeys, ['icon_url', 'quickapp']).forEach(key => data.middleware_img[key] = {});
- data.platFormKeys = Object.freeze([].concat(mpKeys, data.appPlatformKeys))
- data.platFormKeys.forEach(key => data.middleware_checkbox[key] = false)
- return data
- },
- methods: {
- requestCloudFunction(functionName, params = {}) {
- return this.$request(functionName, params, {
- functionName: 'uni-upgrade-center'
- })
- },
- hasValue(value) {
- if (typeof value !== 'object') return !!value
- if (value instanceof Array) return !!value.length
- return !!(value && Object.keys(value).length)
- },
- initFormData(obj) {
- if (!obj || !Object.keys(obj).length) return;
- // TODO delete
- for (let key in obj) {
- const value = obj[key]
- switch (key) {
- case 'icon_url':
- this.middleware_img[key] = formatFilePickerValue(value)
- break;
- case 'screenshot':
- this.screenshotList = value.map(item => formatFilePickerValue(item))
- break;
- default:
- if ((key.indexOf('mp') !== -1 || key.indexOf('app') !== -1) && this.hasValue(value)) {
- this.setPlatformChcekbox(key, true)
- if (value.qrcode_url)
- this.middleware_img[key] = formatFilePickerValue(value.qrcode_url)
- }
- break;
- }
- this.setFormData(key, value)
- }
- },
- setFormData(key, value) {
- const keys = key.indexOf('.') !== -1 ? key.split('.') : [key];
- const lens = keys.length - 1
- let tempObj = this.formData
- keys.forEach((key, index) => {
- const obj = tempObj[key]
- if (typeof obj === 'object' && index < lens) {
- tempObj = obj
- } else {
- tempObj[key] = value
- }
- })
- },
- getFormData(key) {
- const keys = key.indexOf('.') !== -1 ? key.split('.') : [key];
- const lens = keys.length - 1
- let tempObj = this.formData
- for (let i = 0; i < keys.length; i++) {
- const key = keys[i]
- tempObj = tempObj[key]
- if (tempObj == null) {
- return false
- }
- }
- return tempObj
- },
- formatFormData() {
- this.setFormData('screenshot', this.screenshotList.map(item => item.fileID || item.url))
- for (let i = 0; i < this.formData.store_list.length; i++) {
- const item = this.formData.store_list[i]
- if (item.scheme.trim().length === 0) {
- this.formData.store_list.splice(i, 1)
- i--
- continue;
- }
- const index = schemes.indexOf((item.scheme.match(/(.*):\/\//) || [])[1])
- if (index !== -1) {
- if (item.id !== schemeBrand[index]) {
- this.deletedStore.push(item.id)
- }
- item.id = schemeBrand[index]
- }
- item.priority = parseFloat(item.priority)
- }
- this.keepItems = this.platFormKeys
- .filter(key =>
- this.getPlatformChcekbox(key) &&
- (this.formData[key].url || this.formData[key].qrcode_url)
- )
- .concat(['icon_url', 'screenshot', 'create_date', 'store_list'])
- if (this.formData.h5 && this.formData.h5.url)
- this.keepItems.push('h5');
- },
- // 根据 appid 自动填充
- autoFill() {
- const appid = this.getFormData('appid')
- if (!appid) {
- return
- }
- uni.showLoading({
- mask: true
- })
- this.requestCloudFunction('getAppInfo', {
- appid
- })
- .then(res => {
- if (res.success) {
- this.setFormData('description', res.description)
- this.setFormData('name', res.name)
- return
- }
- }).catch(e => {
- console.error(e)
- }).finally(() => {
- uni.hideLoading()
- })
- },
- autoFillApp() {
- const appid = this.getFormData('appid')
- if (!appid) {
- return
- }
- this.appPlatformKeys.forEach(key => {
- this.fetchAppInfo(appid, this.appPlatformValues[key]).then(res => {
- if (res && res.success) {
- this.setPlatformChcekbox(key, true)
- this.setFormData(key, {
- name: res.name,
- url: res.url
- })
- return;
- }
- })
- })
- },
- fetchAppInfo(appid, platform) {
- uni.showLoading({
- mask: true
- })
- return this.requestCloudFunction('getAppVersionInfo', {
- appid,
- platform
- }).then(res => {
- return res
- }).catch(e => {
- console.error(e)
- }).finally(() => {
- uni.hideLoading()
- })
- },
- iconUrlSuccess(res, key) {
- uni.showToast({
- icon: 'success',
- title: '上传成功',
- duration: 500
- })
- this.setFormData(key, res.tempFilePaths[0])
- },
- async iconUrlDelete(res, key) {
- let deleteRes = await this.requestCloudFunction('deleteFile', {
- fileList: [res.tempFile.fileID || res.tempFile.url]
- })
- deleteRes.fileList ?
- deleteRes = deleteRes.fileList[0] :
- deleteRes = deleteRes[0];
- if (deleteRes.success || deleteRes.code === "SUCCESS") {
- uni.showToast({
- icon: 'success',
- title: '删除成功',
- duration: 800
- })
- if (!key) return;
- this.setFormData(key, '')
- this.$refs.form.clearValidate(key)
- }
- },
- getPlatformChcekbox(mp_name) {
- return this.middleware_checkbox[mp_name]
- },
- setPlatformChcekbox(mp_name, value = false) {
- this.middleware_checkbox[mp_name] = value
- },
- selectFile() {
- if (this.hasPackage) {
- uni.showToast({
- icon: 'none',
- title: '只可上传一个文件,请删除已上传后重试',
- duration: 1000
- });
- }
- }
- },
- computed: {
- hasPackage() {
- return this.appPackageInfo && !!Object.keys(this.appPackageInfo).length
- },
- }
- }
|