create-iking-admin
Version:
金合技术中台脚手架
124 lines (115 loc) • 3.59 kB
text/typescript
/*
* @Author : wfl
* @LastEditors: fj
* @description :
* @updateInfo :
* @Date : 2023-07-31 18:21:04
* @LastEditTime: 2023-08-10 18:25:28
*/
import { _ } from 'iking-utils'
import useNewsStore from '@main/store/modules/news'
import useTabbarStore from '@main/store/modules/tabbar'
import { ENewsChannel } from '../../enum'
// import { useNews } from '../useNews'
import { msgApi } from '@main/api/modules/msg'
// const {
// getMsgChannelByNo
// } = useNews()
const REGEX = /【(.*?)】/g
const REGEX2 = /\${(.*?)\}(.*)$/
export const useChannel = (isEdit = false, systemForm: Ref<any>) => {
const IS_EDITED = isEdit && (systemForm.value.id !== null)
const newsStore = useNewsStore()
const router = useRouter()
const loading = ref(false)
const { msgSuccess, msgError } = useMessage()
const replaceStr = (str: string) => {
// eslint-disable-next-line no-template-curly-in-string
return str?.replace(REGEX, '$${$1}').replace(REGEX2, '$1$2')
}
const formatData = (status: typeof ENewsChannel.启用 | typeof ENewsChannel.禁用) => {
return {
...systemForm.value,
content: replaceStr(systemForm.value.content),
status,
configured: true,
redirectDefinitions: [{
redirectTo: systemForm.value.redirectDefinitions
}]
}
}
// 保存不启用
const handSaveUnnable = async () => {
const data = _.cloneDeep(systemForm.value)
if (data?.$row)
delete data.$row
loading.value = true
const { success, msg } = !IS_EDITED
? await msgApi.insertMsgTemplate(formatData(ENewsChannel.禁用))
: await msgApi.updateMsgChannelTemplate({ ...data, content: replaceStr(data.content), status: ENewsChannel.禁用 })
loading.value = false
if (success) {
msgSuccess(msg)
if (!IS_EDITED) {
systemForm.value.configured = true
systemForm.value.status = ENewsChannel.禁用
}
}
else {
msgError(msg)
}
}
// 启用
const handEnable = async (cb?: Function) => {
const data = _.cloneDeep(systemForm.value)
if (data?.$row)
delete data.$row
loading.value = true
const { success, msg } = !IS_EDITED
? await msgApi.insertMsgTemplate(formatData(ENewsChannel.启用))
: await msgApi.updateMsgChannelTemplate({ ...data, content: replaceStr(data.content), status: ENewsChannel.启用 })
loading.value = false
cb?.(success)
if (success) {
msgSuccess(msg)
if (!IS_EDITED) {
systemForm.value.configured = true
systemForm.value.status = ENewsChannel.启用
}
else {
handCancel()
}
}
else {
msgError(msg)
}
}
const tabbarStore = useTabbarStore()
// 取消
const handCancel = () => {
router.back()
newsStore.setMsgContentForm(false)
tabbarStore.remove(location.hash.slice(1))
}
return {
loading,
handSaveUnnable,
handEnable,
handCancel,
msgSuccess,
msgError,
linkHolder: '请输入跳转链接,支持系统内链接(approve://approve-center/approve-list)和系统外链接(http://www.abc.com)',
linkRule: [{
required: false,
validator: (rule: any, value: any, callback: any) => {
const REG = /^[^\s]+:\/\/\S+$/
if (value === '')
callback()
else if (!REG.test(value))
callback(new Error('跳转链接格式错误'))
else
callback()
}
}]
}
}