瀏覽代碼

Delete templates with remove button in view

master
Immanuel Onyeka 1 年之前
父節點
當前提交
bb1f7eaa70
共有 2 個文件被更改,包括 47 次插入13 次删除
  1. +17
    -11
      components/estimates.vue
  2. +30
    -2
      skouter.go

+ 17
- 11
components/estimates.vue 查看文件

@@ -57,7 +57,7 @@ ${{(template.estimate.price / 100).toLocaleString()}}
<label>Cash to close: ${{format(l.result.cashToClose)}}</label> <label>Cash to close: ${{format(l.result.cashToClose)}}</label>
</div> </div>
<button @click="() => download(template.estimate)">Generate PDF</button> <button @click="() => download(template.estimate)">Generate PDF</button>
<button @click="() => deleting = true">Remove</button>
<button @click="() => deletingt = true">Remove</button>
<button @click="() => template = null">Cancel</button> <button @click="() => template = null">Cancel</button>
</div> </div>
</section> </section>
@@ -103,9 +103,15 @@ ${{(estimate.price / 100).toLocaleString()}}


<Dialog v-if="deleting" @close="() => deleting = false"> <Dialog v-if="deleting" @close="() => deleting = false">
<h3>Are you sure you want to delete this estimate?</h3> <h3>Are you sure you want to delete this estimate?</h3>
<button @click="() => del(estimate ?? template.estimate)">Confirm</button>
<button @click="() => del(estimate)">Confirm</button>
</Dialog> </Dialog>


<Dialog v-if="deletingt" @close="() => deletingt = false">
<h3>Are you sure you want to delete this template?</h3>
<button @click="() => delt(template)">Confirm</button>
</Dialog>


</div> </div>
</template> </template>


@@ -124,7 +130,8 @@ let templates = ref([])
let estimate = ref() let estimate = ref()
let template = ref() let template = ref()
let dlink = ref("") let dlink = ref("")
let deleting = ref()
let deleting = ref(false)
let deletingt = ref(false)


function newFee(fee, isDebit) { function newFee(fee, isDebit) {
if (!isDebit) { if (!isDebit) {
@@ -188,7 +195,7 @@ function getEstimates() {
} }


function getTemplates() { function getTemplates() {
fetch(`/api/estimate/templates`,
fetch(`/api/templates`,
{method: 'GET', {method: 'GET',
headers: { headers: {
"Accept": "application/json", "Accept": "application/json",
@@ -201,12 +208,11 @@ function getTemplates() {
}).then (result => { }).then (result => {
if (!result || !result.length) return // Exit if token is invalid or no fees are saved if (!result || !result.length) return // Exit if token is invalid or no fees are saved
templates.value = result templates.value = result
console.log(result)
}) })
} }


function saveTemplate(e) { function saveTemplate(e) {
fetch(`/api/estimate/templates`,
fetch(`/api/templates`,
{method: 'POST', {method: 'POST',
body: JSON.stringify(e), body: JSON.stringify(e),
headers: { headers: {
@@ -235,8 +241,8 @@ function del(e) {
}) })
} }


function remove(t) {
fetch(`/api/estimate/template/remove`,
function delt(t) {
fetch(`/api/templates`,
{method: 'DELETE', {method: 'DELETE',
body: JSON.stringify(t), body: JSON.stringify(t),
headers: { headers: {
@@ -245,9 +251,9 @@ function remove(t) {
}, },
}).then(response => { }).then(response => {
if (response.ok) { if (response.ok) {
estimates.value = estimates.value.filter(e => e.id != estimate.value.id)
estimate.value = null
deleting.value = false
templates.value = templates.value.filter(t => t.id != template.value.id)
template.value = null
deletingt.value = false
} }
}) })
} }


+ 30
- 2
skouter.go 查看文件

@@ -593,6 +593,18 @@ func deleteEstimate(w http.ResponseWriter, db *sql.DB, r *http.Request) {
if err != nil { http.Error(w, err.Error(), 500); return } if err != nil { http.Error(w, err.Error(), 500); return }
} }


func deleteET(w http.ResponseWriter, db *sql.DB, r *http.Request) {
var et ETemplate
var err error
err = json.NewDecoder(r.Body).Decode(&et)
if err != nil { w.WriteHeader(422); return }
claims, err := getClaims(r)
err = et.del(db, claims.Id)
if err != nil { http.Error(w, err.Error(), 500); return }
}



func getMi(db *sql.DB, loan int) (MI, error) { func getMi(db *sql.DB, loan int) (MI, error) {
var mi MI var mi MI
@@ -2113,6 +2125,18 @@ func (estimate *Estimate) del(db *sql.DB, user int) (error) {
return nil return nil
} }


func (et *ETemplate) del(db *sql.DB, user int) (error) {
var query string
var err error

query = `DELETE FROM estimate_template WHERE id = ? AND user_id = ?`
_, err = db.Exec(query, et.Id, user)
if err != nil { return err }

return nil
}

func (eTemplate *ETemplate) insert(db *sql.DB) (error) { func (eTemplate *ETemplate) insert(db *sql.DB) (error) {
var query string var query string
var row *sql.Row var row *sql.Row
@@ -2554,14 +2578,18 @@ func api(w http.ResponseWriter, r *http.Request) {
r.Method == http.MethodPost && r.Method == http.MethodPost &&
guard(r, 1): guard(r, 1):
summarize(w, db, r) summarize(w, db, r)
case match(p, "/api/estimate/templates", &args) &&
case match(p, "/api/templates", &args) &&
r.Method == http.MethodGet && r.Method == http.MethodGet &&
guard(r, 1): guard(r, 1):
getETemplates(w, db, r) getETemplates(w, db, r)
case match(p, "/api/estimate/templates", &args) &&
case match(p, "/api/templates", &args) &&
r.Method == http.MethodPost && r.Method == http.MethodPost &&
guard(r, 1): guard(r, 1):
createETemplate(w, db, r) createETemplate(w, db, r)
case match(p, "/api/templates", &args) &&
r.Method == http.MethodDelete &&
guard(r, 1):
deleteET(w, db, r)
case match(p, "/api/pdf", &args) && case match(p, "/api/pdf", &args) &&
r.Method == http.MethodPost && r.Method == http.MethodPost &&
guard(r, 1): guard(r, 1):


Loading…
取消
儲存