123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711 |
- // nova-tourism/components/dev-route/index.js
- let Parse = getApp().Parse;
- const company = getApp().globalData.company
- const uid = Parse.User.current()?.id
- const req = require('../../../utils/request')
- Component({
- /**
- * 组件的属性列表
- */
- properties: {
- rid: null, //devRouter的id
- object_id: null, //编辑的objcetId
- edit_field_map: null, //字段编辑对象
- is_btn: null, //是否显示提交按钮(save当前对象)
- },
- /**
- * 组件的初始数据
- */
- data: {
- color: '#46a9a4', //主题色
- text_color: 'black', //文字颜色
- editMap: {},
- editFields: [], //编辑对象列表
- isShowPointer: false, //指针弹框
- pointerList: [], //指针列表
- pointer_val: null, //搜索指针的关键字
- fieldIndex: null, //当前操作的编辑对象index
- timeout: null, //指针搜索框计时器
- is_btn: null, //是否显示提交按钮(save当前对象)
- queryParamsData: null, //当前编辑的对象(不存在则 new)
- },
- lifetimes: {
- detached: function () {},
- attached: async function () {
- this.getToken()
- setTimeout(() => {
- this.refersh()
- }, 800);
- },
- },
- /**
- * 组件的方法列表
- */
- methods: {
- async refersh() {
- let {
- is_btn
- } = this.properties
- this.setData({
- is_btn
- })
- await this.getDevRoute()
- this.getDataItem()
- },
- /**获取devRoute */
- async getDevRoute() {
- let {
- rid,
- edit_field_map
- } = this.properties
- console.log(edit_field_map)
- let query = new Parse.Query('DevRoute')
- let d = await query.get(rid)
- let devRoute = d?.toJSON()
- console.log(devRoute)
- let editMap = {}
- let editFieldsList = []
- for (let i in devRoute?.editFields) {
- let item = devRoute?.editFields[i]
- if (item.key in edit_field_map) { //如果当前字段存在于父组件传递的默认编辑字段之内
- if (('isHide' in edit_field_map[item.key]) && edit_field_map[item.key]['isHide']) {} else { //排除isHide为true的字段,其他字段使用父组件默认编辑
- for (let map_key in edit_field_map[item.key]) {
- devRoute.editFields[i][map_key] = edit_field_map[item.key][map_key]
- }
- editFieldsList.push(devRoute.editFields[i])
- editMap[item.key] = {
- type: item.type,
- val: item.default || null
- }
- }
- } else {
- editFieldsList.push(devRoute.editFields[i])
- editMap[item.key] = {
- type: item.type,
- val: item.default || null
- }
- }
- }
- console.log(editFieldsList)
- this.setData({
- devRoute,
- className: d?.get('pageUrl')?.split('/')?.pop(),
- editFields: editFieldsList,
- editMap
- })
- },
- /**获取数据*/
- async getDataItem() {
- let {
- object_id
- } = this.properties
- if (!object_id) return
- let {
- className,
- editMap,
- editFields
- } = this.data
- let pointerKeys = editFields.filter(item => item.type == 'Pointer' || item.view == 'pointer-array')?.map(item => item.key)
- let query = new Parse.Query(className)
- for (let i in pointerKeys) {
- query.include(pointerKeys[i])
- }
- let d = await query.get(object_id)
- if (!d?.id) return
- let dataItem = d?.toJSON()
- for (let i in editFields) {
- let item = editFields[i]
- if (item.view == 'edit-image') {
- if (item.type == 'String') { //单张图片
- editMap[item.key].val = dataItem[item.key] ? [{
- url: dataItem[item.key]
- }] : item.default || null
- }
- if (item.type == 'Array') { //数组图片
- if (dataItem[item.key] && dataItem[item.key]?.length > 0) {
- editMap[item.key].val = dataItem[item.key]?.map(item => {
- return {
- url: item
- }
- })
- } else {
- editMap[item.key].val = item.default || []
- }
- }
- } else {
- if (item.type == 'Pointer') { //指针类型
- let text = dataItem[item.key]?.storeName || dataItem[item.key]?.title || dataItem[item.key]?.name || dataItem[item.key]?.orderNum || dataItem[item.key]?.mobile
- editMap[item.key].text = text
- } else if (item.type == 'Array' && item.view == 'pointer-array') { //数组指针
- let text = []
- for (let x in dataItem[item.key]) {
- let xtem = dataItem[item.key][x]
- text.push(xtem?.storeName || xtem?.title || xtem?.name || xtem?.orderNum || xtem?.mobile)
- editMap[item.key].text = text
- }
- }
- editMap[item.key].val = dataItem[item.key] || item.default || null
- }
- }
- this.setData({
- dataItem,
- editMap,
- queryParamsData: d
- })
- },
- /** 获取token 上传图片所需*/
- async getToken() {
- let res = await Parse.Cloud.run('qiniu_uptoken', {
- company: company
- })
- this.setData({
- uploadURL: res.zoneUrl,
- domain: res.domain,
- uptokenURL: res.uptoken,
- })
- },
- /** textarea改变 - String类型*/
- changeTextarea(e) {
- let {
- editMap
- } = this.data
- console.log(e)
- let {
- key
- } = e.currentTarget.dataset
- let {
- value
- } = e.detail
- editMap[key].val = value
- this.setData({
- editMap
- })
- },
- /**上传单张图片 - String类型 */
- changeFile(e) {
- console.log(e)
- let {
- editMap
- } = this.data
- let {
- key
- } = e.currentTarget.dataset
- console.log(e.detail[0])
- editMap[key].val = e.detail
- this.setData({
- editMap
- })
- },
- /**单选框改变 - String类型 */
- radioChange(e) {
- console.log(e)
- let {
- editMap
- } = this.data
- let {
- key
- } = e.currentTarget.dataset
- editMap[key].val = e.detail
- this.setData({
- editMap
- })
- },
- /** 数字输入框改变 - Number类型*/
- changeNumber(e) {
- let {
- editMap
- } = this.data
- console.log(e)
- let {
- key
- } = e.currentTarget.dataset
- let {
- value
- } = e.detail
- editMap[key].val = value
- this.setData({
- editMap
- })
- },
- /**开关改变 */
- switchChange(e) {
- let {
- editMap
- } = this.data
- console.log(e)
- let {
- key
- } = e.currentTarget.dataset
- editMap[key].val = e.detail
- this.setData({
- editMap
- })
- },
- /**上传多张图片 - Array类型 */
- changeFile_array(e) {
- console.log(e)
- let {
- editMap
- } = this.data
- let {
- key
- } = e.currentTarget.dataset
- editMap[key].val = e.detail
- this.setData({
- editMap
- })
- },
- /**添加文本 - Array类型 */
- addTextarea(e) {
- console.log(e)
- let {
- editMap
- } = this.data
- let {
- key
- } = e.currentTarget.dataset
- editMap[key].val = [...(editMap[key].val || []), e.detail.value]
- this.setData({
- editMap
- })
- },
- /**删除文本 - Array类型 */
- delTextarea(e) {
- console.log(e)
- let {
- editMap
- } = this.data
- let {
- key,
- index
- } = e.currentTarget.dataset
- editMap[key].val?.splice(index, 1)
- this.setData({
- editMap
- })
- },
- /**指针弹框-开 */
- async openPointer(e) {
- let {
- editFields
- } = this.data
- let {
- index
- } = e.currentTarget.dataset
- if (editFields[index].disabled) {
- wx.showToast({
- title: `无法编辑${editFields[index].name}`,
- icon: 'none'
- })
- return
- }
- this.setData({
- fieldIndex: index,
- pointerList: [],
- pointer_val: '',
- isShowPointer: true
- })
- this.getPointerItem()
- },
- /**指针弹框-关 */
- closePointer() {
- this.setData({
- isShowPointer: false
- })
- },
- /**选中指针 */
- checkPointer(e) {
- let {
- editFields, //编辑对象列表
- pointerList, //指针列表
- fieldIndex, //当前操作的编辑对象index
- editMap,
- } = this.data
- let {
- index
- } = e.currentTarget.dataset
- let editField = editFields[fieldIndex]
- let p_item = pointerList[index]
- console.log(pointerList)
- pointerList = pointerList?.map((item, i) => {
- if (i == index) {
- item['dev_router_check'] = true
- } else {
- item['dev_router_check'] = false
- }
- return item
- })
- editMap[editField.key].val = {
- className: editField?.targetClass,
- __type: 'Pointer',
- objectId: p_item?.objectId
- }
- editMap[editField.key].text = p_item.storeName || p_item.name || p_item.title || p_item.orderNum || p_item.mobile
- this.setData({
- editMap,
- pointerList
- })
- this.closePointer()
- },
- /**选中指针 - Array */
- checkPointer_Array(e) {
- let {
- editFields, //编辑对象列表
- pointerList, //指针列表
- fieldIndex, //当前操作的编辑对象index
- editMap,
- } = this.data
- let {
- index
- } = e.currentTarget.dataset
- let editField = editFields[fieldIndex]
- let p_item = pointerList[index]
- console.log(editField, p_item)
- pointerList[index]['dev_router_check'] = !(pointerList[index]['dev_router_check'] || false)
- let checkList = pointerList?.filter(item => item.dev_router_check) || []
- editMap[editField.key].val = checkList.map(p_item => {
- return {
- className: editField?.targetClass,
- __type: 'Pointer',
- objectId: p_item?.objectId
- }
- })
- editMap[editField.key].text = checkList.map(p_item => {
- return p_item.storeName || p_item.name || p_item.title || p_item.orderNum || p_item.mobile
- })
- console.log(editMap)
- this.setData({
- editMap,
- pointerList
- })
- },
- /**删除数组指针 */
- delPointer(e) {
- console.log(e)
- let {
- editMap
- } = this.data
- let {
- key,
- index
- } = e.currentTarget.dataset
- editMap[key].text?.splice(index, 1)
- editMap[key].val?.splice(index, 1)
- this.setData({
- editMap
- })
- },
- /**指针搜索框变化 */
- async valChange(e) {
- await this.setData({
- pointer_val: e.detail || ''
- })
- let {
- timeout
- } = this.data
- clearTimeout(timeout)
- timeout = setTimeout(async () => {
- await this.setData({
- pointerList: [],
- })
- this.getPointerItem()
- }, 1000);
- this.setData({
- timeout
- })
- },
- /** 查询指针*/
- async getPointerItem() {
- let {
- editMap,
- pointer_val,
- pointerList,
- fieldIndex,
- editFields
- } = this.data
- let editField = editFields[fieldIndex]
- let sql = `SELECT DISTINCT(column_name) FROM information_schema.columns
- WHERE table_name = '${editField.targetClass}'`
- let columnList = await req.customSQL(sql)
- let where = {
- "$or": []
- }
- if (editField?.queryParams?.where?.type) {
- where = JSON.parse(JSON.stringify(editField?.queryParams?.where || {})) || {}
- } else {
- where = {}
- }
- console.log(where)
- for (let i in columnList) {
- let item = columnList[i]
- if (item.column_name == 'company') where['company'] = {
- "$eq": company
- }
- if (item.column_name == 'isDeleted') where['isDeleted'] = {
- "$ne": true
- }
- if (pointer_val) {
- if (item.column_name == 'name') where['$or'] = [...(where['$or'] || []), {
- "name": {
- "$regex": `${pointer_val}`
- }
- }]
- if (item.column_name == 'title') where['$or'] = [...(where['$or'] || []), {
- "title": {
- "$regex": `${pointer_val}`
- }
- }]
- if (item.column_name == 'mobile') where['$or'] = [...(where['$or'] || []), {
- "mobile": {
- "$regex": `${pointer_val}`
- }
- }]
- if (item.column_name == 'orderNum') where['$or'] = [...(where['$or'] || []), {
- "orderNum": {
- "$regex": `${pointer_val}`
- }
- }]
- if (item.column_name == 'storeName') where['$or'] = [...(where['$or'] || []), {
- "storeName": {
- "$regex": `${pointer_val}`
- }
- }]
- }
- }
- console.log(where)
- let queryParams = {
- where,
- limit: 20,
- skip: pointerList?.length || 0
- }
- let query = new Parse.Query.fromJSON(editField?.targetClass, queryParams)
- query.descending('createdAt')
- let d = await query.find()
- if (!d?.length) {
- wx.showToast({
- title: '没有更多了',
- icon: 'none'
- })
- return
- }
- editMap[editField.key].text
- let list = d?.map(item => {
- let obj = item.toJSON()
- if (editMap[editField.key]?.text && editMap[editField.key]?.text?.length > 0) {
- if (editField.type == 'Array') {
- let x = editMap[editField.key].val.findIndex(val_item => val_item.objectId == obj.objectId)
- if (x != -1) {
- obj.dev_router_check = true
- }
- } else {
- if (editMap[editField.key].val.objectId == obj.objectId) {
- obj.dev_router_check = true
- }
- }
- }
- return obj
- })
- this.setData({
- pointerList: [...(pointerList || []), ...(list || [])]
- })
- },
- //#region ShopGoods表specMap字段编辑 ================================================
- /**添加属性 - specMap字段 */
- addKey_ShopGoods_specMap(e) {
- console.log(e)
- let {
- editMap
- } = this.data
- let {
- key
- } = e.currentTarget.dataset
- let text = e.detail.value
- let obj = {
- value: null,
- price: null,
- vipPrice: null,
- }
- if (!editMap[key].val?.specList || editMap[key].val?.specList?.length <= 0) editMap[key].val = {
- specList: []
- }
- editMap[key].val['specList'] = [...(editMap[key]?.val?.specList || []), text]
- editMap[key].val[text] = [...(editMap[key]?.val[text] || []), obj]
- this.setData({
- editMap
- })
- },
- /**删除属性 - specMap字段 */
- delKey_ShopGoods_specMap(e) {
- console.log(e)
- let {
- editMap
- } = this.data
- let {
- key,
- spec_index
- } = e.currentTarget.dataset
- console.log(key, spec_index)
- let text = editMap[key].val.specList[spec_index]
- console.log(text)
- delete editMap[key].val[text]
- editMap[key].val.specList.splice(spec_index, 1)
- this.setData({
- editMap
- })
- },
- /**设置specMap-value */
- setValue(e) {
- console.log(e)
- let {
- editMap
- } = this.data
- let {
- key,
- spec,
- spec_map_index
- } = e.currentTarget.dataset
- editMap[key].val[spec][spec_map_index].value = e.detail.value
- this.setData({
- editMap
- })
- },
- /**设置specMap-price */
- setPrice(e) {
- console.log(e)
- let {
- editMap
- } = this.data
- let {
- key,
- spec,
- spec_map_index
- } = e.currentTarget.dataset
- editMap[key].val[spec][spec_map_index].price = parseFloat(e.detail.value || 0)
- this.setData({
- editMap
- })
- },
- /**设置specMap-vipPrice */
- setVipPrice(e) {
- console.log(e)
- let {
- editMap
- } = this.data
- let {
- key,
- spec,
- spec_map_index
- } = e.currentTarget.dataset
- editMap[key].val[spec][spec_map_index].vipPrice = parseFloat(e.detail.value || 0)
- this.setData({
- editMap
- })
- },
- /**添加specMap里面key内的item */
- addSpecMap(e) {
- console.log(e)
- let {
- editMap
- } = this.data
- let {
- key,
- spec
- } = e.currentTarget.dataset
- let obj = {
- value: null,
- price: null,
- vipPrice: null,
- }
- editMap[key].val[spec] = [...(editMap[key].val[spec] || []), obj]
- this.setData({
- editMap
- })
- },
- /**删除specMap里面key内的item */
- delSpecMapItem(e) {
- console.log(e)
- let {
- editMap
- } = this.data
- let {
- key,
- spec,
- spec_map_index
- } = e.currentTarget.dataset
- editMap[key].val[spec].splice(spec_map_index, 1)
- this.setData({
- editMap
- })
- },
- //#endregion ShopGoods表specMap字段编辑 end ================================================
- /**提交 */
- async submit() {
- let {
- editMap,
- queryParamsData,
- className,
- editFields
- } = this.data
- console.log(editMap)
- let editMapParse = {}
- if (!queryParamsData?.id) {
- let NewClass = Parse.Object.extend(className)
- queryParamsData = new NewClass()
- queryParamsData.set('company', {
- className: 'Company',
- __type: 'Pointer',
- objectId: company
- })
- }
- for (let i in editFields) {
- let item = editFields[i]
- if (item.required && ((!editMap[item.key].val) || editMap[item.key].val?.length <= 0)) {
- wx.showToast({
- title: `${item.name} 为必填项,请补充`,
- icon: 'none'
- })
- return
- }
- if((!editMap[item.key].val) || editMap[item.key].val?.length <= 0) continue
- if (item.type == 'Number') {
- editMapParse[item.key] = parseFloat(editMap[item.key].val)
- } else if (item.type == 'String' && item.view == 'edit-image') {
- editMapParse[item.key] = editMap[item.key].val[0]?.url
- } else if (item.type == 'Array') {
- if (item.view == 'edit-image') {
- editMapParse[item.key] = editMap[item.key].val?.map(val_item => val_item.url)
- } else if (item.view == 'pointer-array') {
- editMapParse[item.key] = editMap[item.key].val?.map(val_item => {
- return {
- __type: 'Pointer',
- className: item.targetClass,
- objectId: val_item.objectId
- }
- })
- }
- }
- queryParamsData.set(item.key, editMapParse[item.key] || editMap[item.key].val)
- }
- console.log(editMap)
- console.log(queryParamsData)
- await queryParamsData.save()
- setTimeout(() => {
- wx.navigateBack({
- delta: 1
- })
- }, 1000);
-
- }
- }
- })
|