unicloud-database.uvue 9.0 KB
Newer Older
雪洛's avatar
雪洛 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
<template>
  <!-- #ifdef APP -->
  <scroll-view style="flex: 1">
  <!-- #endif -->
    <view>
      <page-head :title="title"></page-head>
      <view class="uni-padding-wrap uni-common-mt">
        <view class="uni-btn-v uni-common-mt">
          <button type="primary" @click="dbAdd">新增单条数据</button>
          <button type="primary" @click="dbBatchAdd">新增多条数据</button>
          <button type="primary" @click="dbUpdate">更新数据</button>
          <button type="primary" @click="dbGet">where传字符串获取数据</button>
          <button type="primary" @click="dbGetWithCommand">where传对象获取数据</button>
          <button type="primary" @click="dbRemove">删除数据</button>
          <button type="primary" @click="dbLookupInit">初始化联表查询数据</button>
          <button type="primary" @click="dbLookup">联表查询</button>
        </view>
      </view>
    </view>
  <!-- #ifdef APP -->
  </scroll-view>
  <!-- #endif -->
</template>
<script>
  export default {
    data() {
      return {
雪洛's avatar
雪洛 已提交
28 29 30 31 32 33 34 35 36
        title: 'ClientDB',
        addId: '',
        batchAddIds: [] as Array<string>,
        batchAddinserted: 0,
        updateUpdated: 0,
        getData: [] as Array<UTSJSONObject>,
        getWithCommandData: [] as Array<UTSJSONObject>,
        removeDeleted: 0,
        lookupData: [] as Array<UTSJSONObject>,
37
        isUniTest: false
雪洛's avatar
雪洛 已提交
38 39 40 41 42
      }
    },
    onLoad() {
    },
    onUnload() {
43
      if (this.isUniTest) {
44 45
        uni.hideToast()
      }
雪洛's avatar
雪洛 已提交
46
    },
47 48 49 50 51
    computed: {
      dataTag() : string {
        return this.isUniTest ? 'default-tag' + Date.now() : 'default-tag'
      }
    },
雪洛's avatar
雪洛 已提交
52
    methods: {
53 54 55 56 57 58 59 60 61 62 63
      notify(content : string, title : string) {
        if (!this.isUniTest) {
          uni.showModal({
            title,
            content,
            showCancel: false
          })
        } else {
          uni.showToast({
            title: content
          })
雪洛's avatar
雪洛 已提交
64
          console.log(title, content)
65 66
        }
      },
67
      async dbAdd() : Promise<void> {
雪洛's avatar
雪洛 已提交
68 69 70 71
        uni.showLoading({
          title: '加载中...'
        })
        const db = uniCloud.databaseForJQL()
72
        await db.collection('type')
雪洛's avatar
雪洛 已提交
73 74
          .add({
            num: 1,
75
            tag: this.dataTag,
雪洛's avatar
雪洛 已提交
76
            date: new Date()
雪洛's avatar
雪洛 已提交
77
          })
雪洛's avatar
雪洛 已提交
78
          .then(res => {
雪洛's avatar
雪洛 已提交
79 80
            uni.hideLoading()
            console.log(res)
雪洛's avatar
雪洛 已提交
81
            this.addId = res.id
82
            this.notify(`新增成功,id: ${res.id}`, '提示')
雪洛's avatar
雪洛 已提交
83
          })
雪洛's avatar
雪洛 已提交
84
          .catch((err : any | null) => {
雪洛's avatar
雪洛 已提交
85 86
            uni.hideLoading()
            const error = err as UniCloudError
87
            this.notify(error.errMsg, '错误')
雪洛's avatar
雪洛 已提交
88 89
          })
      },
90
      async dbBatchAdd() : Promise<void> {
雪洛's avatar
雪洛 已提交
91 92 93 94
        uni.showLoading({
          title: '加载中...'
        })
        const db = uniCloud.databaseForJQL()
95
        await db.collection('type')
雪洛's avatar
雪洛 已提交
96 97
          .add([{
            num: 2,
98
            tag: this.dataTag,
雪洛's avatar
雪洛 已提交
99 100
          }, {
            num: 3,
101
            tag: this.dataTag,
雪洛's avatar
雪洛 已提交
102
          }])
雪洛's avatar
雪洛 已提交
103
          .then((res) => {
雪洛's avatar
雪洛 已提交
104 105
            uni.hideLoading()
            console.log(res)
106
            console.log('JSON.stringify(res.inserted)', JSON.stringify(res.inserted))
雪洛's avatar
雪洛 已提交
107 108
            this.batchAddIds = res.ids
            this.batchAddinserted = res.inserted
109
            this.notify(`新增成功条数${res.inserted}, id列表: ${res.ids.join(',')}`, '提示')
雪洛's avatar
雪洛 已提交
110
          })
雪洛's avatar
雪洛 已提交
111
          .catch((err : any | null) => {
雪洛's avatar
雪洛 已提交
112 113
            uni.hideLoading()
            const error = err as UniCloudError
114
            this.notify(error.errMsg, '错误')
雪洛's avatar
雪洛 已提交
115 116
          })
      },
117
      async dbGet() : Promise<void> {
雪洛's avatar
雪洛 已提交
118 119 120 121
        uni.showLoading({
          title: '加载中...'
        })
        const db = uniCloud.databaseForJQL()
122
        await db.collection('type')
雪洛's avatar
雪洛 已提交
123
          .where(
124
            `tag == "${this.dataTag}"`
雪洛's avatar
雪洛 已提交
125
          )
雪洛's avatar
雪洛 已提交
126 127 128 129 130
          .field('num, tag')
          .orderBy('num desc')
          .skip(1)
          .limit(2)
          .get()
雪洛's avatar
雪洛 已提交
131
          .then(res => {
雪洛's avatar
雪洛 已提交
132 133
            uni.hideLoading()
            console.log(res)
雪洛's avatar
雪洛 已提交
134
            this.getData = res.data
135
            this.notify(`获取成功,取到了${res.data.length}条数据`, '提示')
雪洛's avatar
雪洛 已提交
136
          })
雪洛's avatar
雪洛 已提交
137
          .catch((err : any | null) => {
雪洛's avatar
雪洛 已提交
138 139
            uni.hideLoading()
            const error = err as UniCloudError
140
            this.notify(error.errMsg, '错误')
雪洛's avatar
雪洛 已提交
141 142
          })
      },
143
      async dbGetWithCommand() : Promise<void> {
雪洛's avatar
雪洛 已提交
144 145 146 147
        uni.showLoading({
          title: '加载中...'
        })
        const db = uniCloud.databaseForJQL()
148
        await db.collection('type')
雪洛's avatar
雪洛 已提交
149
          .where({
150 151
            num: db.command.gt(1),
            tag: this.dataTag
雪洛's avatar
雪洛 已提交
152
          })
雪洛's avatar
雪洛 已提交
153 154 155 156 157
          .field('num, tag')
          .orderBy('num desc')
          .skip(1)
          .limit(2)
          .get()
雪洛's avatar
雪洛 已提交
158
          .then(res => {
雪洛's avatar
雪洛 已提交
159 160
            uni.hideLoading()
            console.log(res)
雪洛's avatar
雪洛 已提交
161
            this.getWithCommandData = res.data
162
            this.notify(`获取成功,取到了${res.data.length}条数据`, '提示')
雪洛's avatar
雪洛 已提交
163
          })
雪洛's avatar
雪洛 已提交
164
          .catch((err : any | null) => {
雪洛's avatar
雪洛 已提交
165 166
            uni.hideLoading()
            const error = err as UniCloudError
167
            this.notify(error.errMsg, '错误')
雪洛's avatar
雪洛 已提交
168 169
          })
      },
170
      async dbUpdate() : Promise<void> {
雪洛's avatar
雪洛 已提交
171 172 173 174
        uni.showLoading({
          title: '加载中...'
        })
        const db = uniCloud.databaseForJQL()
175
        await db.collection('type')
雪洛's avatar
雪洛 已提交
176
          .where(
177
            `tag == "${this.dataTag}"`
雪洛's avatar
雪洛 已提交
178 179 180
          )
          .update({
            num: 4
雪洛's avatar
雪洛 已提交
181
          })
雪洛's avatar
雪洛 已提交
182
          .then(res => {
雪洛's avatar
雪洛 已提交
183 184
            uni.hideLoading()
            console.log(res)
雪洛's avatar
雪洛 已提交
185
            this.updateUpdated = res.updated
186
            this.notify(`更新成功,更新了${res.updated}条数据`, '提示')
雪洛's avatar
雪洛 已提交
187
          })
雪洛's avatar
雪洛 已提交
188
          .catch((err : any | null) => {
雪洛's avatar
雪洛 已提交
189 190
            uni.hideLoading()
            const error = err as UniCloudError
191
            this.notify(error.errMsg, '错误')
雪洛's avatar
雪洛 已提交
192 193
          })
      },
194
      async dbRemove() : Promise<void> {
雪洛's avatar
雪洛 已提交
195 196 197 198
        uni.showLoading({
          title: '加载中...'
        })
        const db = uniCloud.databaseForJQL()
199
        await db.collection('type')
雪洛's avatar
雪洛 已提交
200
          .where(
201
            `tag == "${this.dataTag}"`
雪洛's avatar
雪洛 已提交
202 203
          )
          .remove()
雪洛's avatar
雪洛 已提交
204
          .then(res => {
雪洛's avatar
雪洛 已提交
205 206
            uni.hideLoading()
            console.log(res)
雪洛's avatar
雪洛 已提交
207
            this.removeDeleted = res.deleted
208
            this.notify(`删除成功,删掉了${res.deleted}条数据`, '提示')
雪洛's avatar
雪洛 已提交
209
          })
雪洛's avatar
雪洛 已提交
210
          .catch((err : any | null) => {
雪洛's avatar
雪洛 已提交
211 212
            uni.hideLoading()
            const error = err as UniCloudError
213
            this.notify(error.errMsg, '错误')
雪洛's avatar
雪洛 已提交
214 215
          })
      },
216
      async dbLookupInit() : Promise<void> {
雪洛's avatar
雪洛 已提交
217 218 219 220
        uni.showLoading({
          title: '加载中...'
        })
        const db = uniCloud.databaseForJQL()
221 222
        await db.collection('local')
          .where(`tag == "${this.dataTag}"`)
雪洛's avatar
雪洛 已提交
223 224 225
          .remove()
          .then(() : Promise<UniCloudDBRemoveResult> => {
            return db.collection('foreign')
226
              .where(`tag == "${this.dataTag}"`)
雪洛's avatar
雪洛 已提交
227 228 229 230 231 232 233
              .remove()
          })
          .then(() : Promise<UniCloudDBBatchAddResult> => {
            return db.collection('local')
              .add([{
                id: "local_1",
                name: "local_1_name",
234
                tag: this.dataTag,
雪洛's avatar
雪洛 已提交
235 236 237 238
                foreign_id: "foreign_1"
              }, {
                id: "local_2",
                name: "local_2_name",
239
                tag: this.dataTag,
雪洛's avatar
雪洛 已提交
240 241 242 243 244 245 246 247
                foreign_id: "foreign_2"
              }])
          })
          .then(() : Promise<UniCloudDBBatchAddResult> => {
            return db.collection('foreign')
              .add([{
                id: "foreign_1",
                name: "foreign_1_name",
248
                tag: this.dataTag
雪洛's avatar
雪洛 已提交
249 250 251
              }, {
                id: "foreign_2",
                name: "foreign_2_name",
252
                tag: this.dataTag
雪洛's avatar
雪洛 已提交
253 254
              }])
          })
雪洛's avatar
雪洛 已提交
255
          .then((_) : void => {
雪洛's avatar
雪洛 已提交
256
            uni.hideLoading()
257
            this.notify('数据初始化成功', '提示')
雪洛's avatar
雪洛 已提交
258
          })
雪洛's avatar
雪洛 已提交
259
          .catch((err : any | null) => {
雪洛's avatar
雪洛 已提交
260 261 262
            uni.hideLoading()
            console.error(err)
            const error = err as UniCloudError
263
            this.notify(error.errMsg, '错误')
雪洛's avatar
雪洛 已提交
264 265
          })
      },
266
      async dbLookup() : Promise<void> {
雪洛's avatar
雪洛 已提交
267 268 269 270 271
        uni.showLoading({
          title: '加载中...'
        })
        const db = uniCloud.databaseForJQL()
        const local = db.collection('local')
272
          .where(`tag == "${this.dataTag}"`)
雪洛's avatar
雪洛 已提交
273 274
          .getTemp()
        const foreign = db.collection('foreign')
275
          .where(`tag == "${this.dataTag}"`)
雪洛's avatar
雪洛 已提交
276
          .getTemp()
277
        await db.collection(local, foreign)
雪洛's avatar
雪洛 已提交
278
          .get()
雪洛's avatar
雪洛 已提交
279
          .then(res => {
雪洛's avatar
雪洛 已提交
280 281
            uni.hideLoading()
            console.log(res)
雪洛's avatar
雪洛 已提交
282
            this.lookupData = res.data
283
            this.notify(`联表查询成功,取到了${res.data.length}条数据`, '提示')
雪洛's avatar
雪洛 已提交
284
          })
雪洛's avatar
雪洛 已提交
285
          .catch((err : any | null) => {
雪洛's avatar
雪洛 已提交
286 287
            uni.hideLoading()
            const error = err as UniCloudError
288
            this.notify(error.errMsg, '错误')
雪洛's avatar
雪洛 已提交
289 290 291 292 293 294 295
          })
      }
    }
  }
</script>

<style>
雪洛's avatar
雪洛 已提交
296
</style>