NGToolsAdmin/pages/system/app/mixin/publish_add_detail_mixin.js
2024-09-13 16:39:31 +08:00

269 lines
6.5 KiB
JavaScript

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].abm_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]
})
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
},
}
}